کدهای دودویی
یک کد باینری نشان دهنده متن، دستورالعمل‌های پردازندهٔ کامپیوتر یا داده‌های دیگری است که از سیستم دو نماده استفاده می‌کنند، اما غالباً سیستم باینری از اعداد ۰ و ۱ استفاده می‌کند. این کد باینری یک الگوی رقم‌های دودویی (بیت) را به هر حرف، دستورالعمل و غیره اختصاص می‌دهد. برای مثال یک رشتهٔ دودویی هشت بیتی می‌تواند هر یک از ۲۵۶مقدار ممکن را نشان دهد و در نتیجه می‌تواند نشان دهندهٔ انواع آیتم‌های مختلف باشد...
کدهای باینری در محاسبات و ارتباطات از راه دور برای انواع روش‌های رمزگذاری داده‌ها مانند تبدیل رشته‌های کاراکتر به رشته‌های بیتی مورد استفاده قرار گیرد. این روش‌ها ممکن است از عرض ثابت یا عرض متغیر رشته‌ها استفاده کنند. در یک عرض ثابت کد باینری، هر حرف، رقم، یا دیگر کاراکتر به وسیلهٔ یک رشته بیت هم عرض نشان داده می‌شوند که آن رشتهٔ بیتی به عنوان یک عدد دودویی تفسیر می‌شود که معمولاً در جدول‌های کد به صورت در مبنای هشت، ده یا شانزده نشان داده می‌شوند. تعداد زیادی از مجموعه کاراکترها و تعداد زیادی رمزگذاری کاراکتر برای آن‌ها موجود است.
یک رشتهٔ بیتی به عنوان یک عدد دودویی تفسیر می‌شود ومی توان آن را به یک عدد دهدهی ترجمه کرد. برای مثال حرف a اگر به وسیلهٔ رشتهٔ بیتی نشان داده شود به صورت ۰۱۱۰۰۰۰۱ (کد استاندارد اسکی) خواهد بود و همچنین می‌تواند در عنوان عدد دهدهی ۹۷ نشان داده شود.
سیستم عدد دودویی مدرن، اساس کد باینری، توسط گوتفرید لایبنیتس در سال ۱۶۷۹ اختراع شد که آن را در مقالهٔ خود با عنوان" Explication de l'Arithmétique Binaire معرفی کرد." عنوان آن به فارسی برابر است با "توضیح حساب دودویی"..
سیستم لایبنیتس مانند سیستم عددی دودویی مدرن از ۰ و ۱ استفاده می‌کند.اعداد دودویی از نظر علم دین در مرکز توجه لایبنیتس بود. او معتقد بود که اعداد دودویی نمادی از عقیدهٔ مسیحیان در مورد خلقت از هیچ چیز است؛ خلقت و پوچی ("creatio ex nihilo").
لایبنیتس در تلاش بود که سیستمی پیدا کند که توضیحات شفاهی منطق را به ریاضی محض تبدیل کند. پس از اینکه ایده‌های او نادیده گرفته شد او به سراغ متن کلاسیک چینی به نام I Ching یا کتاب تغییرات رفت که با استفاده از یک نوع کد دودویی نوشته شده است. این کتاب ایدهٔ او را تأیید می‌کرد که زندگی می‌تواند ساده‌سازی شود و به یک سری گزارهٔ ساده کاهش یابد. او یک سیستم متشکل از سطرهای صفر و یک را ایجاد کرد. در طول این مدت زمان لایبنیتس نتوانست یک کاربرد برای آن سیستم پیدا کند.
سیستم‌های دوتایی پیش از لایبنیتس نیز در جهان باستان وجود داشته‌ است. در الکترونیک و در سیستم‌های کامپیوتری و دیجیتالی، به منظور انتقال اطلاعات از اعداد دودویی یا باینری (binary) که در قالب 0 و 1 هستند استفاده می‌شود.
برخلاف مدارهای غیرخطی و آنالوگی مانند تقویت‌کننده‌های AC که وظیفه‌ی پردازش سیگنال‌هایی با فرکانس و دامنه‌ی متغیر بر عهده دارند، مدارهای دیجیتال سیگنال‌هایی را پردازش می‌کنند که تنها دو سطح ولتاژ یا دو حالت دارند. این دو حالت «0 منطقی» و «1 منطقی» نام دارند.
به طور کلی «1» منطقی نشان‌دهنده‌ی ولتاژ بالاتر مانند 5 ولت است و معمولاً به عنوان مقدار HIGH (بالا) شناخته می‌شود. «0» منطقی نیز نمایانگر ولتاژ پایین‌تر مانند 0 ولت یا زمین است و معمولاً به عنوان مقدار LOW (پایین) نام‌گذاری می‌شود. این دو سطح ولتاژ گسسته، نماینده‌ی مقادیر دیجیتالی 0 و 1 بوده و در مدارهای دیجیتالی و کامپیوتری به عنوان ارقام باینری (BInary digiTS) و یا به اختصار «بیت» (BITS) شناخته می‌شوند.
استفاده از اعداد باینری در سیستم‌های الکترونیک دیجیتال بسیار مناسب است، زیرا در این اعداد تنها دو مقدار بولی مجاز برای نمایش 0 یا 1 منطقی وجود دارد.
«دستگاه اعداد باینری» یک دستگاه شماره گذاری پایه‌‌ی 2 است که از همان قوانین مرسوم ریاضی و دستگاه رایج اعداد دهدهی یا اعداد پایه‌ی 10 تبعیت می‌کند. در این دستگاه به جای توان‌های 10 (10n) مثل 1، 10، 100، 1000 و … از توان‌های 2 (2n) مثل 1، 2، 4، 8، 16، 32 و … استفاده می‌شود؛ لذا ارزش هر بیت دو برابر بیت قبل از خود خواهد بود.
در مدارهای دیجیتالی و سیستم‌های کامپیوتری محدودیتی برای انتخاب ولتاژها وجود ندارد، اما معمولاً ولتاژهای کمتر از 10 ولت به کار می‌روند. در دیجیتال این ولتاژها «سطوح منطقی» نامیده می‌شوند و یک سطح ولتاژ بیانگر وضعیت HIGH و سطح ولتاژ پایین‌تر نشان‌دهنده‌ی وضعیت LOW است. وجود هر دو وضعیت HIGH و LOW برای استفاده از دستگاه اعداد باینری ضروری است.
سیگنال‌های دیجیتال از سطوح ولتاژ گسسته یا متمایزی تشکیل شده‌اند که دائماً بین دو وضعیت HIGH و LOW تغییر می‌کنند. اما وجه تمایز سیگنال‌ها یا ولتاژهای «دیجیتال» از سایر سینگال‌ها چیست و چگونه می‌توان سطوح ولتاژ HIGH و LOW را نشان داد؟ برای درک این موضوع ابتدا باید بدانیم که مدارها و سیستم‌های الکترونیکی به دو دسته‌ی اصلی تقسیم می‌شوند:
مقدار یک کمیت آنالوگ با گذشت زمان پیوسته تغییر می‌کند، در حالی که یک کمیت دیجیتال تنها مقادیر گسسته یا پله‌ای – HIGH و LOW – اختیار می‌کند. در بسیاری از مدارها، سیگنال‌های دیجیتال و آنالوگ به یکدیگر تبدیل می‌شوند، مانند مبدل‌های آنالوگ به دیجیتال Analogue to Digital Converter) ADC) و یا مبدل‌های دیجیتال به آنالوگ Digital to Analogue Converter) DAC). در هر صورت، سیگنال دیجیتال ورودی یا خروجی، مقدار باینری معادل سیگنال آنالوگ خواهد بود.
یکی از بزرگترین ضعف‌های اعداد باینری، طولانی بودن بیش از حد رشته‌‌ی باینری مربوط به اعداد دهدهی بزرگ است. در سیستم‌های دیجیتالی عظیم مثل کامپیوترها، استفاده از اعداد باینری 8، 16 و حتی 32 رقمی بسیار رایج است؛ اما خواندن و نوشتن تعداد زیادی عدد باینری 16 یا 32 بیتی، بدون پیش آمدن هیچ خطایی عملاً غیرممکن خواهد بود. یکی از روش‌های مرسوم برای غلبه بر این مشکل، دسته‌بندی اعداد باینری در گروه‌ها یا مجموعه‌های چهار بیتی و در نهایت استفاده از اعداد هگزادسیمال (Hexadecimal) است.
سیستم شماره‌گذاری هگزادسیمال و یا به اختصار «هگز» (Hex)، همان دستگاه اعداد مبنای 16 است. این سیستم شماره‌گذاری به علت فرمت تقریباً فشرده‌ای که دارد، گزینه‌ی بسیار مناسبی برای نمایش رشته‌های باینری طولانی به شمار می‌رود. همچنین درک آن نسبت به رشته‌های باینری متشکل از صفر و یک‌ها آسان‌تر است.
از آن‌جایی که اعداد هگزادسیمال اعدادی در مبنای 16 هستند، برای نمایش این اعداد می‌توان از 16 رقم متفاوت و از اعداد 0 تا 15 استفاده کرد. واضح است که اعداد دهدهی 10، 11، 12، 13، 14 و 15 دو رقم دارند. این موضوع در حالت عادی مشکلی ایجاد نمی‌کند، اما به طور مثال اگر عدد 10 را در مبنای 16 بنویسیم، نمی‌توان تشخیص داد که این عدد 10 دهدهی است یا 2 باینری. برای حل این مشکل مقادیر ده، یازده، دوازده، سیزده، چهارده و پانزده را به ترتیب با حروف بزرگ انگلیسی E، D، C، B، A و F نمایش می‌دهیم.
استفاده از رشته‌های باینری طولانی بسیار دشوار است. اما با دسته‌بندی این اعداد باینری بزرگ به گروه‌های کوچکتر و با تعداد ارقام مساوی، فهم و نوشتن آنها راحت‌تر خواهد بود. به عنوان مثال، کار کردن با 11112 1100 0101 1101 به جای 11010101110011112 بسیار آسان‌تر است.استفاده از رشته‌های باینری طولانی بسیار دشوار است. اما با دسته‌بندی این اعداد باینری بزرگ به گروه‌های کوچکتر و با تعداد ارقام مساوی، فهم و نوشتن آنها راحت‌تر خواهد بود. به عنوان مثال، کار کردن با 11112 1100 0101 1101 به جای 11010101110011112 بسیار آسان‌تر است. برای تبدیل اعداد باینری به اعداد هگزادسیمال، ابتدا باید عدد باینری را در گروه‌های چهار رقمی دسته‌بندی کنیم. این گروه‌ها می‌توانند مقداری بین 010 (00002) تا 1510 (11112) داشته باشند که همان معادل هگز 0 تا F است.
از آنجایی که در محاسبات روزمره از اعداد مبنای 10 یا دهدهی استفاده می‌شود اما کامپیوترها و دستگاه‌های دیجیتالی تنها اعداد باینری را درک می‌کنند، به روشی نیاز داریم که اعداد دهدهی را به باینری یا مبنای 2 تبدیل کنیم. استفاده از کد BCD یکی از بهترین روش‌ها برای این کار است.
همانطور که می‌دانیم یک کد باینری n بیتی، مجموعه‌ای از n بیت است که با آن می‌توان تا 2n ترکیب متمایز ایجاد کرد. مزیت استفاده از سیستم BCD در این است که همانند سیستم هگزادسیمال، هر رقم دهدهی نماینده‌ی 4 بیت است؛ لذا برای نمایش هر رقم دهدهی (0 تا 9) از یک کد باینری چهار بیتی استفاده می‌شود.
البته کدهای BCD دقیقاً مانند اعداد هگزادسیمال نیستند و تفاوت‌هایی نیز وجود دارد. به عنوان مثال، حداکثر مقداری که یک عدد هگزادسیمال چهار بیتی می‌تواند اختیار کند F16 یا 11112 است که معادل 15 دهدهی است. اما یک کد BCD حداکثر می‌تواند تا عدد 9 یا 10012 باشد. این مسئله بدان معنی است که با وجود اینکه با چهار رقم باینری می‌توان تا 16 عدد را نشان داد (24)، اما در سیستم شمارش BCD شش ترکیب آخر کاربردی ندارند؛ یعنی استفاده از اعداد 1010 (10 دهدهی)، 1011 (11 دهدهی)، 1100 (12 دهدهی)، 1101 (13 دهدهی)، 1110 (14 دهدهی) و 1111 (15 دهدهی) ممنوع است.
بزرگترین مزیت استفاده از کد BCD، راحت‌تر کردن تبدیل اعداد باینری و دهدهی به یکدیگر است. اگرچه کد BCD بدی‌هایی نیز دارد که مهم‌ترین آن، عدم استفاده از اعداد 1010 (10 دهدهی) تا 1111 (15 دهدهی) است. با این وجود کد BCD کاربردهای بسیار مهمی مخصوصاً در نمایش‌دهنده‌های دیجیتال دارد.
در سیستم شماره‌گذاری BCD، هر رقم از اعداد دهدهی به چهار بیت تقسیم می‌شود. برای ساخت یک کد BCD، تنها کافی است معادل باینری هر رقم دهدهی را در قالب چهار بیتی بنویسیم. لذا یک گروه چهار بیتی 10 حالت مختلف خواهد داشت که از 0000 برای صفر تا 1001 برای نه را شامل می‌شود.
به عنوان مثال، عدد دهدهی 35710 در کد BCD به شکل زیر نمایش داده می‌شود:
35710 = 0011 0101 0111 (BCD)
همانگونه که می‌بینیم، در سیستم BCD از «کدگذاری وزنی» استفاده می‌شود، زیرا جایگاه هر گروه چهار بیتی، وزنی دارد که در مقدار نهایی تأثیرگذار است. به عبارت دیگر، BCD یک کد وزن‌دار است و وزن‌های استفاده شده در کد BCD عبارتند از 8، 4، 2 و 1. لذا از آنجایی که کد BCD نشان‌دهنده‌ی معادل باینری رقم دهدهی مربوطه است، عموماً به آن «کد 8421» نیز گفته می‌شود.
قوانین تبدیل اعداد دهدهی به BCD، شباهت بسیار زیادی به قوانین تبدیل اعداد هگزادسیمال به باینری دارد. ابتدا، ارقام وزن‌دار عدد دهدهی را جدا کرده و سپس معادل باینری هر رقم را در قالب چهار بیت می‌نویسیم. با کنار هم قرار دادن بیت‌های مربوط به هر رقم، کد 8421 BCD عدد به دست می‌آید.
تبدیل BCD به دهدهی دقیقاً عکس عملیات قبلی است. تنها لازم است عدد باینری را به گروه‌های چهار بیتی تقسیم کرده و با شروع از کم ارزش‌ترین رقم، معادل دهدهی هر یک از گروه‌های چهار بیتی را بنویسیم. در صورت نیاز برای تشکیل یک گروه چهار بیتی کامل، در سمت چپ عدد صفرهای اضافی قرار می‌دهیم. به عنوان مثال، عدد 1101012 به 01012 0011 یا 3510 دهدهی تبدیل می‌شود.
در مدارهای دیجیتال هیچ تدارکی برای قرار دادن یک علامت بعلاوه یا منها در کنار عدد دیده نشده است. چون سیستم‌های دیجیتال با اعداد باینری کار می‌کنند که به‌صورت صفر و یک نمایش داده می‌شوند. زمانی که این «1» و «0» ها در مدارهای میکروالکترونیک کنار هم قرار می‌گیرند، بیت (bit) نامیده می‌شوند. این اعداد در چند واحد قرار می‌گیرند که به نام‌هایی مانند بایت (8 بیت) یا کلمه (word = دو بایت) نامیده شده‌اند. یک عدد باینری هشت بیتی (یک بایت) می‌تواند مقداری بین 0 (000000002) تا 255 (111111112) داشته باشد یعنی 28=256 ترکیب مختلف از بیت‌ها، یک بایت ۸ بیتی منفرد را تشکیل می‌دهند. بنابراین یک عدد باینری بی علامت مانند 010011012 برابر با مقدار ده‌دهی 64 + 8 + 4 + 1 = 7710 خواهد بود. اما سیستم‌های دیجیتال و رایانه‌ها باید توانایی استفاده و تغییر اعداد منفی را نیز مانند اعداد مثبت داشته باشند.
مشکل این نحوه نمایش این است که ما قبلاً یک محدوده کامل از اعداد باینری بدون علامت n بیتی داشتیم، اما اینک یک عدد باینری علامت‌دار n-1 بیتی داریم که محدوده ارقام آن کاهش یافته است. در حالی که قبلاً محدوده اعداد باینری ۴ بیتی بدون علامت از ۰ تا ۱۵ یا در نمایش مبنای ۱۶ (هگزادسیمال) از 0 تا F بودند، اما در این‌ روش، نمایش به محدوده اعداد 7- تا 7+ کاهش یافته است. بنابراین عدد باینری بدون علامت، بیت منفرد علامت را ندارد و می‌تواند محدوده باینری بزرگ‌تری داشته باشد، چون معنی‌دارترین بیت (MSB، یعنی بیت سمت چپ) تنها نشان دهنده یک رقم است و به عنوان بیت علامت استفاده نمی‌شود.