شرح سیستم باینری

ساخت وبلاگ

باینری یک سیستم شماره Base-2 است که از دو حالت متقابل منحصر به فرد برای ارائه اطلاعات استفاده می کند. تعداد باینری از عناصری به نام بیت تشکیل شده است که هر بیت می تواند در یکی از دو حالت ممکن باشد. به طور کلی ، ما آنها را با اعداد 1 و 0 نشان می دهیم. ما همچنین در مورد درست و نادرست بودن آنها صحبت می کنیم. از نظر الکتریکی ، این دو حالت ممکن است با ولتاژهای بالا و پایین یا نوعی سوئیچ روشن یا خاموش نشان داده شوند.

ما اعداد باینری را به همان روشی می سازیم که در سیستم سنتی پایه 10 خود اعداد را می سازیم. با این حال ، به جای ستون یک ، یک ستون 10 ، یک ستون 100 (و غیره) ما یک ستون یک ، ستون دو ، ستون چهار ، یک ستون هشت و غیره داریم ، همانطور که در زیر نشان داده شده است.

2 .2 62 52 42 32 22 12 0
.6432168421

به عنوان مثال ، برای نشان دادن شماره 203 در پایه 10 ، می دانیم که یک ستون 3 را در ستون 1 قرار می دهیم ، 0 در ستون 10 و 2 در ستون 100. این با نمایندگان در جدول زیر بیان شده است.

10 210 110 0
203

یا به عبارت دیگر ، 2 × 10 2 + 3 × 10 0 = 200 + 3 = 203. برای نشان دادن همان چیز در باینری ، جدول زیر را خواهیم داشت.

2 72 62 52 42 32 22 12 0
11001011

که معادل 2 7 + 2 6 + 2 3 +2 1 + 2 0 = 128 + 64 + 8 + 2 + 1 = 203 است.

112 اساس محاسبات

ممکن است تعجب کنید که چگونه یک عدد ساده اساس همه کارهای شگفت انگیز است که یک کامپیوتر می تواند انجام دهد. باور کنید یا نه ، این است! پردازنده در رایانه شما دارای یک مجموعه دستورالعمل پیچیده اما در نهایت محدود است که می تواند بر روی مقادیری مانند افزودن ، ضرب و غیره انجام دهد. اساساً ، هر یک از این دستورالعمل ها یک عدد اختصاص داده می شود تا یک برنامه کامل (این را به آن اضافه کنید ، ضرب کنید. این ، تقسیم بر این و غیره) را می توان با یک جریان فقط از اعداد نشان داد. به عنوان مثال ، اگر پردازنده می داند عملکرد 2 علاوه بر این است ، 252 می تواند به معنای "اضافه کردن 5 و 2 و ذخیره خروجی در جایی" باشد. واقعیت البته بسیار پیچیده تر است (به فصل 3 ، معماری رایانه مراجعه کنید) اما به طور خلاصه ، این همان چیزی است که یک کامپیوتر است.

در روزهای کارتهای پانچ ، می توان با چشم خود را دید و صفر که با نگاه کردن به سوراخ های موجود در کارت ، جریان برنامه را تشکیل می دهند. البته این امر به سمت ذخیره شدن از طریق قطبیت ذرات مغناطیسی کوچک و به سرعت (نوارها ، دیسک ها) و به نقطه ای که امروز می توانیم مقادیر غیرقابل تصور از داده ها را در جیب خود حمل کنیم ، ذخیره شد.

ترجمه این اعداد به چیزی مفید برای انسان همان چیزی است که کامپیوتر را بسیار مفید می کند. به عنوان مثال ، صفحه ها از میلیون ها پیکسل گسسته تشکیل شده اند که هر یک برای چشم انسان بسیار کوچک است اما برای ایجاد یک تصویر کامل از هم جدا می شوند. به طور کلی هر پیکسل دارای یک جزء قرمز ، سبز و آبی خاص است که رنگ نمایشگر آن را تشکیل می دهد. البته این مقادیر را می توان با اعداد نشان داد ، که البته می توان آن را با دودویی نشان داد! بنابراین هر تصویری را می توان به میلیون ها نقطه جداگانه تقسیم کرد ، هر نقطه ای که توسط یک قطعه از سه مقدار نشان دهنده مقادیر قرمز ، سبز و آبی برای پیکسل نشان داده شده است. بنابراین با توجه به یک رشته طولانی از چنین اعداد ، که به درستی فرمت شده است ، سخت افزار ویدیویی در رایانه شما می تواند آن اعداد را به سیگنال های برقی تبدیل کند تا پیکسل های جداگانه را روشن و خاموش کند و از این رو یک تصویر را نمایش می دهد.

همانطور که در ادامه می خوانید ، ما کل محیط محاسبات مدرن را از این بلوک ساختمانی اساسی ایجاد خواهیم کرد. از پایین به بالا اگر بخواهید!

113 بیت و بایت

همانطور که در بالا بحث شد ، ما اساساً می توانیم هر چیزی را که می تواند به باینری تبدیل کند ، نشان دهد و توسط رایانه کار می کند. به عنوان مثال ، برای نشان دادن تمام حروف الفبا ، حداقل به ترکیبات مختلف کافی نیاز داریم تا تمام حروف کوچک ، حروف بزرگ ، شماره ها و نگارشی ها ، به علاوه چند مورد اضافی را نشان دهیم. اضافه کردن این امر به این معنی است که ما احتمالاً به حدود 80 ترکیب مختلف نیاز داریم.

اگر دو بیت داشته باشیم ، می توانیم چهار ترکیب منحصر به فرد ممکن را نشان دهیم (00 01 10 11). اگر سه بیت داشته باشیم ، می توانیم 8 ترکیب مختلف را نشان دهیم. به طور کلی ، با N Bits می توانیم 2 ترکیب منحصر به فرد را نشان دهیم.

8 بیت 2 8 = 256 نمایش منحصر به فرد را به ما می دهد ، بیش از اندازه کافی برای ترکیب الفبای ما. ما یک گروه از 8 بیت بایت می نامیم. حدس بزنید متغیر char c چقدر بزرگ است؟یک بایت

1131 ASCII

با توجه به اینکه یک بایت می تواند هر یک از مقادیر 0 تا 255 را نشان دهد ، هر کسی می تواند به طور خودسرانه نقشه برداری بین شخصیت ها و اعداد را تشکیل دهد. به عنوان مثال ، یک سازنده کارت ویدیو می تواند تصمیم بگیرد که 1 نشان دهنده A است ، بنابراین وقتی ارزش 1 به کارت ویدیو ارسال می شود ، یک سرمایه "A" را روی صفحه نمایش می دهد. یک تولید کننده چاپگر ممکن است به دلایلی مبهم تصمیم بگیرد که 1 نشان دهنده "z" پایین تر است ، به این معنی که برای نمایش و چاپ همان چیزها به تبدیل های پیچیده نیاز است.

برای جلوگیری از این اتفاق ، کد استاندارد آمریکایی برای تبادل اطلاعات یا ASCII اختراع شد. این یک کد 7 بیتی است ، به این معنی که 2 7 یا 128 کد موجود وجود دارد.

دامنه کدها به دو بخش اصلی تقسیم می شوند. غیر قابل چاپ و قابل چاپ. شخصیت های قابل چاپ مواردی مانند کاراکترها (مورد بالا و پایین) ، اعداد و نگارشی هستند. کدهای غیر قابل چاپ برای کنترل هستند ، و کارهایی مانند بازگرداندن کالسکه ، زنگ ترمینال یا کد ویژه تهی را انجام می دهند که به هیچ وجه چیزی را نشان نمی دهد.

127 شخصیت منحصر به فرد برای انگلیسی آمریکایی کافی است ، اما وقتی کسی می خواهد شخصیت های متداول در زبان های دیگر را نشان دهد ، به خصوص زبانهای آسیایی که می تواند هزاران شخصیت منحصر به فرد داشته باشد ، بسیار محدود می شود.

برای کاهش این امر ، سیستم های مدرن از ASCII به یونیکد دور می شوند ، که می تواند از 4 بایت برای نشان دادن یک شخصیت استفاده کند و فضای بسیار بیشتری را به دست می آورد!

1132 برابری

ASCII ، تنها با یک کد 7 بیتی ، یک بیت از بایت را به جا می گذارد. این می تواند برای پیاده سازی برابری استفاده شود که یک شکل ساده از بررسی خطا است. یک رایانه را با استفاده از کارتهای پانچ برای ورودی در نظر بگیرید ، جایی که یک سوراخ نشان دهنده 1 است و هیچ سوراخ نشان دهنده 0 نیست. هر پوشش ناخواسته از یک سوراخ باعث می شود یک مقدار نادرست خوانده شود و باعث رفتار نامشخص شود.

برابری اجازه می دهد تا یک بررسی ساده از بیت های یک بایت انجام شود تا اطمینان حاصل شود که آنها به درستی خوانده می شوند. ما می توانیم با استفاده از بیت اضافی به عنوان یک بیت برابری ، عجیب یا حتی برابری را پیاده سازی کنیم.

در برابری عجیب و غریب ، اگر تعداد 1 در 7 بیت اطلاعات عجیب باشد ، بیت برابری تنظیم شده است ، در غیر این صورت تنظیم نشده است. حتی برابری برعکس است. اگر تعداد 1 حتی بیت برابری بر روی 1 تنظیم شود.

به این ترتیب ، تلنگر یک بیت خطای برابری را که قابل تشخیص است ، خواهد داشت.

xxx بیشتر در مورد تصحیح خطا

113رایانه های 3 16 ، 32 و 64 بیتی

اعداد در بایت قرار نمی گیرند. امیدوارم که مانده بانکی شما به دلار بیشتر از آنچه در یک بایت قرار دارد ، نیاز داشته باشد! تمام معماری های عمومی با هدف اصلی حداقل 32 رایانه هستند. این بدان معنی است که ثبت های داخلی آنها 32 بیت (یا 4 بایت) عرض دارد و این عملیات به طور کلی روی مقادیر 32 بیتی کار می کند. ما به 4 بایت به عنوان یک کلمه اشاره می کنیم. این شبیه به زبانی است که حروف (بیت ها) کلمات را در یک جمله تشکیل می دهند ، مگر اینکه در محاسبه هر کلمه اندازه یکسان باشد! اندازه متغیر C int 32 بیت است. معماری های مدرن 64 بیت هستند که اندازه آن پردازنده تا 8 بایت کار می کند.

1134 کیلو ، مگا و گیگا بایت

رایانه ها با بسیاری از بایت ها سروکار دارند. این همان چیزی است که آنها را بسیار قدرتمند می کند! ما به روشی نیاز داریم تا در مورد تعداد زیادی بایت صحبت کنیم و یک روش طبیعی استفاده از "سیستم بین المللی واحدها" (SI) است که در اکثر مناطق علمی دیگر استفاده می شود. به عنوان مثال ، کیلو به 10 3 یا 1000 واحد اشاره دارد ، همانطور که در یک کیلوگرم 1000 گرم دارد.

1000 یک دور خوب در پایه 10 است ، اما در باینری 1111101000 است که یک عدد به خصوص "دور" نیست. با این حال ، 1024 (یا 2 10) یک تعداد دور است - (10000000000 - و اتفاق می افتد که کاملاً نزدیک به پایه 10 به معنی ارزش "کیلو" (1000 بر خلاف 1024) باشد. بنابراین 1024 بایت به طور طبیعی به عنوان یک کیلوبیت شناخته شد. واحد بعدی SI "مگا" برای 10 6 است و پیشوندها با 10 3 به سمت بالا ادامه می یابد (مربوط به گروه بندی معمول سه رقم هنگام نوشتن اعداد زیاد). همانطور که اتفاق می افتد ، 2 20 دوباره به تعریف SI Base 10 نزدیک استمگا ؛ 1048576 بر خلاف 1000000. افزایش 2 واحد پایه توسط قدرت 10 از نظر عملکردی نزدیک به مقدار SI Base 10 باقی مانده است ، اگرچه هر یک از فاکتور در حال افزایش کمی از پایه پایه SI فاصله می گیرد. بنابراین واحدهای پایه Si-10 نزدیک هستندبه اندازه کافی "و معمولاً برای مقادیر پایه 2 استفاده می شود.

نامپایه 2 فاکتوربایتنزدیک پایه 10 فاکتورپایه 10 بایت
1 کیلوبایت2 101،02410 31000
1 مگابایت2 201،048،57610 61000،000
1 گیگ2 301،073،741،82410 91،000،000،000
1 ترابایت2 401،099،511،627،77610 121،000،000،000،000
1 PETABYTE2 501،125،899،906،842،62410 151،000،000،000،000،000
1 اگزابیت2 601،152،921،504،606،846،97610 181،000،000،000،000،000،000

این می تواند بسیار مفید باشد که به عنوان کمک به ارتباط سریع رابطه بین تعداد بیت ها و اندازه های "انسان" ، به عنوان کمک به حافظه متعهد شوید. به عنوان مثال ، ما می توانیم به سرعت محاسبه کنیم که یک رایانه 32 بیتی می تواند با توجه به اینکه 2 32 می توانند به 2 (2 + 30) یا 2 2 2 30 نوترکیب ، که فقط 4 × 2 30 است ، حداکثر چهار گیگ حافظه را برطرف کند ،ما می دانیم که 2 30 گیگابایت است. یک مقدار 64 بیتی به طور مشابه می تواند حداکثر 16 exabytes (2 4 4 4) را برطرف کند. ممکن است شما علاقه مند باشید که این تعداد چقدر بزرگ است. برای به دست آوردن احساس چقدر این تعداد ، محاسبه کنید که در صورت افزایش یک بار در ثانیه ، چقدر طول می کشد تا 2 64 بشمارید.

1135 کیلو ، مگا و گیگا بیت

جدا از سردرگمی مربوط به اضافه بار واحدهای SI بین باینری و پایه 10 ، ظرفیت ها اغلب از نظر بیت ها به جای بایت نقل می شوند. به طور کلی این اتفاق در هنگام صحبت در مورد دستگاه های شبکه یا ذخیره سازی رخ می دهد. شاید متوجه شده باشید که اتصال ADSL شما به عنوان چیزی شبیه به 1500 کیلوبیت در ثانیه توصیف شده است. محاسبه ساده است ؛1000 را ضرب کنید (برای کیلو) ، 8 را برای گرفتن بایت و سپس 1024 تقسیم کنید تا کیلوبایت دریافت کنید (بنابراین 1500 کیلوبیت در ثانیه = 183 کیلوبایت در ثانیه).

بدنه استاندارد سازی SI این مصارف دوگانه را به رسمیت شناخته و پیشوندهای منحصر به فرد برای استفاده باینری را مشخص کرده است. طبق استاندارد 1024 بایت یک کیبیبیت ، کوتاه برای بایت باینری کیلو (کوتاه به KIB) است. پیشوندهای دیگر دارای پیشوند مشابهی هستند (به عنوان مثال Mebibyte ، MIB). سنت تا حد زیادی از استفاده از این اصطلاحات جلوگیری می کند ، اما ممکن است شما در برخی از ادبیات به نظر برسید.

1136 تبدیل

ساده ترین راه برای تبدیل بین پایه ها استفاده از رایانه است ، از این گذشته ، این همان چیزی است که آنها در آن خوب هستند! با این حال ، اغلب مفید است که بدانیم چگونه می توانید تبدیل ها را با دست انجام دهید.

ساده ترین روش برای تبدیل بین پایه ها تقسیم تکرار است. برای تبدیل ، به طور مکرر تقسیم بر اساس پایه ، تا زمانی که مقدار صفر صفر نباشد ، توجه داشته باشید که در هر مرحله از باقیمانده ها یادداشت می کنید. سپس باقیمانده ها را به صورت معکوس بنویسید ، از پایین شروع کنید و هر بار به سمت راست اضافه کنید. یک مثال باید نشان دهد ؛از آنجا که ما به باینری تبدیل می شویم از پایه 2 استفاده می کنیم.

مقطعباقی مانده
20310÷ 2 =1011
10110÷ 2 =501
5010÷ 2 =250
2510÷ 2 =121
1210÷ 2 =60
610÷ 2 =30
310÷ 2 =11
110÷ 2 =01

خواندن از پایین و ضمیمه هر بار به سمت راست 11001011 می دهد ، که از مثال قبلی دیدیم 203 بود.

114 عملیات بولی

جورج بول یک ریاضیدان بود که کل منطقه ریاضیات به نام جبر بولی را کشف کرد. در حالی که او در اواسط دهه 1800 اکتشافات خود را انجام داد ، ریاضیات وی اصول تمام علوم کامپیوتر است. جبر بولی موضوعی گسترده است ، ما در اینجا فقط حداقل کمترین کار را برای شروع کار ارائه می دهیم.

عملیات بولی به سادگی ورودی خاصی را می گیرد و به دنبال یک قانون ، خروجی خاصی تولید می کند. به عنوان مثال ، ساده ترین عملیات بولی ، نه به سادگی مقدار عملگر ورودی را معکوس می کند. سایر عملکردها معمولاً دو ورودی دارند و یک خروجی واحد تولید می کنند.

عملیات اساسی بولی مورد استفاده در علوم کامپیوتر به راحتی به یاد می آید و در زیر ذکر شده است. ما آنها را در زیر با جداول حقیقت نمایندگی می کنیم. آنها به سادگی تمام ورودی ها و خروجی های ممکن را نشان می دهند. اصطلاح واقعی به سادگی 1 را در باینری منعکس می کند.

1141 نه

معمولاً توسط!، نه به سادگی مقدار را معکوس می کند ، بنابراین 0 1 و 1 می شود 0

ورودیخروجی
10
01
1142 و

به یاد داشته باشید که چگونه کار و عملیات به آن فکر می کند "اگر یکی از ورودی ها و دیگری صحیح باشد ، نتیجه درست است

ورودی 1ورودی 2خروجی
000
100
010
111
1143 یا

به یاد داشته باشید که عملکرد OR یا عملیات چگونه آن را به عنوان "اگر یک ورودی یا ورودی دیگر صحیح باشد ، نتیجه می گیرد ، نتیجه درست است

ورودی 1ورودی 2خروجی
000
101
011
111
1144 منحصر به فرد یا (XOR)

منحصر به فرد یا ، که به عنوان XOR نوشته شده است ، یک مورد خاص یا جایی است که خروجی در آن صحیح است اگر یک و تنها یک ورودی از ورودی ها صحیح باشد. این عملیات با کمال تعجب می تواند بسیاری از ترفندهای جالب را انجام دهد ، اما شما بسیاری از آن را در هسته مشاهده نخواهید کرد.

ورودی 1ورودی 2خروجی
000
101
011
110

115 نحوه استفاده رایانه ها از عملیات بولی

آن را باور کنید یا نه ، اساساً هر کاری که رایانه شما انجام می دهد به عملیات فوق باز می گردد. به عنوان مثال ، نیمی از Adder نوعی مدار است که از عملیات بولی ساخته شده است که می تواند بیت ها را به هم اضافه کند (به آن یک نیمی از Adder گفته می شود زیرا این کار بیت های حمل را انجام نمی دهد). نیمی از افزودنی های بیشتری را در کنار هم قرار دهید ، و شما شروع به ساختن چیزی می کنید که می تواند شماره های باینری طولانی را به هم اضافه کند. مقداری حافظه خارجی اضافه کنید و یک کامپیوتر دارید.

از نظر الکترونیکی ، عملیات بولی در دروازه های ساخته شده توسط ترانزیستورها اجرا می شود. به همین دلیل ممکن است در مورد شمارش ترانزیستور و مواردی مانند قانون مور شنیده باشید. هرچه ترانزیستورها بیشتر ، دروازه ها بیشتر باشد ، چیزهای بیشتری نیز می توانید به هم اضافه کنید. برای ایجاد رایانه مدرن ، دروازه های بسیار زیادی وجود دارد ، و ترانزیستورهای بسیار زیادی وجود دارد. برخی از جدیدترین پردازنده های Itanium حدود 460 میلیون ترانزیستور دارند.

116 کار با باینری در C

در C ما یک رابط مستقیم با تمام عملیات فوق داریم. جدول زیر اپراتورها را توصیف می کند

عملاستفاده در C
نه!
وت&
or|
زور^

ما از این عملیات در متغیرها برای اصلاح بیت ها در متغیر استفاده می کنیم. قبل از دیدن نمونه هایی از این ، ابتدا باید برای توصیف نماد شش ضلعی منحرف شویم.

12 شش ضلعی

hexadecimal به یک سیستم شماره 16 پایه اشاره دارد. ما فقط به یک دلیل از این کار در علوم کامپیوتر استفاده می کنیم ، این امر باعث می شود که انسان در مورد شماره های باینری فکر کند. رایانه ها فقط به صورت باینری سر و کار دارند و شش ضلعی صرفاً میانبر برای ما انسانهایی است که سعی در همکاری با رایانه داریم.

پس چرا پایه 16؟خوب ، طبیعی ترین انتخاب پایه 10 است ، زیرا ما عادت کرده ایم از سیستم شماره روزانه خود در پایه 10 فکر کنیم. اما پایه 10 به خوبی با باینری کار نمی کند - برای نشان دادن 10 عنصر مختلف در باینری ، ما به چهار بیت نیاز داریم. با این حال ، چهار بیت ، شانزده ترکیب ممکن را به ما می دهد. بنابراین ما می توانیم از جاده بسیار دشوار تلاش برای تبدیل بین پایه 10 و باینری استفاده کنیم ، یا جاده آسان را طی کنیم و یک سیستم شماره 16 پایه را تشکیل دهیم - شش ضلعی!

hexadecimal از شماره 10 پایه استاندارد استفاده می کند ، اما یک b c d e f را اضافه می کند که به 10 11 12 13 14 15 اشاره دارد (N. B. ما از صفر شروع می کنیم).

به طور سنتی ، هر زمان که شماره ای را با 0 برابر مشاهده می کنید ، این تعداد شش ضلعی را نشان می دهد.

همانطور که گفته شد ، برای نشان دادن 16 الگوی مختلف در باینری ، ما دقیقاً به چهار بیت نیاز داریم. بنابراین ، هر عدد شش ضلعی دقیقاً چهار بیت را نشان می دهد. شما باید آن را یک تمرین برای یادگیری جدول زیر از طریق قلب در نظر بگیرید.

شش ضلعیدودوییاعشاری
000000
100011
200102
300113
401004
501015
601106
701117
810008
910019
A101010
B101111
C110012
D110113
E111014
F111115

البته هیچ دلیلی برای ادامه الگوی وجود ندارد (مثلاً G را به ارزش 16 اختصاص دهید) ، اما 16 ارزش یک تجارت عالی بین مبهم های حافظه انسان و تعداد بیت های مورد استفاده توسط یک کامپیوتر است (گاهی اوقات شما نیز این کار را خواهید کرد. به پایه 8 مورد استفاده ، به عنوان مثال برای مجوزهای پرونده تحت UNIX مراجعه کنید). ما به سادگی تعداد بیشتری از بیت ها را با شماره های بیشتر نشان می دهیم. به عنوان مثال ، یک متغیر شانزده بیتی را می توان با 0xAB12 نشان داد ، و برای پیدا کردن آن به صورت باینری ، به سادگی هر یک از شماره های فردی را بگیرید ، آن را طبق جدول تبدیل کنید و همه آنها را به هم بپیوندید (بنابراین 0xab12 به عنوان شماره باینری 16 بیتی 1010101100010010 به پایان می رسد)بشرما می توانیم از معکوس برای تبدیل از باینری به شش ضلعی استفاده کنیم.

ما همچنین می توانیم از همان طرح تقسیم مکرر برای تغییر پایه یک عدد استفاده کنیم. به عنوان مثال ، برای یافتن 203 در شش ضلعی

مقطعباقی مانده
20310÷ 16 =1211 (0xB)
1210÷ 16 =012 (0xC)

از این رو 203 در شش ضلعی 0xCB است.

13 پیامدهای عملی

131 استفاده از باینری در کد

در حالی که باینری زبان اصلی هر رایانه است ، برنامه ریزی یک کامپیوتر در زبانهای سطح بالا کاملاً عملی است بدون اینکه اولین چیز را در مورد آن بدانید. با این حال ، برای کد سطح پایین ، ما به چند اصل باینری اساسی علاقه مندیم به طور مکرر استفاده می شود.

132 نقاب و پرچم

1321 ماسک

در کد سطح پایین ، اغلب مهم است که ساختارها و متغیرهای خود را تا حد امکان فضا حفظ کنید. در بعضی موارد ، این می تواند شامل بسته بندی مؤثر دو متغیر (به طور کلی مرتبط) در یک باشد.

به یاد داشته باشید که هر بیت دو حالت را نشان می دهد ، بنابراین اگر می دانیم که یک متغیر فقط ، مثلاً 16 حالت ممکن را می توان با 4 بیت نشان داد (یعنی 2 4 = 16 مقادیر منحصر به فرد). اما کوچکترین نوع که می توانیم در C اعلام کنیم 8 بیت (یک کاراکتر) است ، بنابراین می توانیم چهار بیت را هدر دهیم ، یا راهی برای استفاده از آنهایی که از بیت های باقی مانده استفاده می کنند.

ما به راحتی می توانیم این کار را با فرآیند پوشیدن انجام دهیم. این از قوانین عملیات منطقی برای استخراج مقادیر استفاده می کند.

این روند در شکل زیر نشان داده شده است. ما می توانیم دو مقدار جداگانه 4 بیتی "داخل" یک شخصیت 8 بیتی را حفظ کنیم. ما چهار بیت فوقانی را به عنوان یک مقدار (آبی) و 4 بیت پایین (قرمز) به عنوان دیگری در نظر می گیریم. برای استخراج چهار بیت پایین ، ماسک خود را تنظیم می کنیم تا بیت های 4 پایین روی 1 (0x0F) تنظیم شود. از آنجا که منطقی و عملیاتی تنها در صورتی که هر دو بیت 1 باشد ، بیت را تنظیم می کند ، آن دسته از ماسک تنظیم شده روی 0 به طور مؤثر بیت هایی را که به آنها علاقه مند نیستیم پنهان می کند.

برای به دست آوردن چهار بیت برتر (آبی) ، ماسک را معکوس می کنیم. به عبارت دیگر ، 4 بیت برتر را روی 1 و 4 بیت پایین روی 0 قرار دهید. توجه داشته باشید که این نتیجه از 1010 0000 (یا در hexadecimal 0xa0) است که واقعاً می خواهیم این را به عنوان یک مقدار منحصر به فرد 4 بیتی 1010 (0x0a) در نظر بگیریم. برای رسیدن به BITS به موقعیت مناسب ، 4 بار از عملیات تغییر مناسب استفاده می کنیم و مقدار نهایی 0000 1010 را می دهیم.

تنظیم بیت ها به منطقی یا عملکرد نیاز دارد. با این حال ، به جای استفاده از 1 'S به عنوان ماسک ، از 0 استفاده می کنیم. شما باید یک نمودار شبیه به شکل فوق بکشید و از طریق تنظیم بیت با منطقی یا عملیاتی کار کنید.

1322 پرچم

غالباً یک برنامه تعداد زیادی متغیر را خواهد داشت که فقط به عنوان پرچم در برخی شرایط وجود دارد. به عنوان مثال ، یک دستگاه حالت الگوریتمی است که از طریق تعدادی از حالت های مختلف انتقال می یابد اما ممکن است فقط در یک زمان باشد. بگویید 8 ایالت مختلف دارد. ما به راحتی می توانیم 8 متغیر مختلف را اعلام کنیم ، یکی برای هر ایالت. اما در بسیاری موارد بهتر است یک متغیر 8 بیتی را اعلام کنید و هر بیت را به پرچم یک حالت خاص اختصاص دهید.

پرچم ها یک مورد خاص از نقاب زدن هستند ، اما هر بیت بیانگر یک حالت خاص بولی (روشن یا خاموش) است. یک متغیر N Bit می تواند N پرچم های مختلف را در خود جای دهد. برای مثال معمولی استفاده از پرچم ها ، مثال کد زیر را مشاهده کنید - اغلب در این کد اساسی تغییرات را مشاهده خواهید کرد.

آشنایی با رمزارزها...
ما را در سایت آشنایی با رمزارزها دنبال می کنید

برچسب : نویسنده : بهاءالدین خرمشاهی بازدید : 52 تاريخ : چهارشنبه 2 فروردين 1402 ساعت: 18:26