باینری چیست؟
در حالت عادی، هیچ دستگاه دیجیتالی توانایی فهم زبان انسانها را ندارد. فارسی، انگلیسی، عربی، پرتغالی، چینی، روسی و سایر زبانهایی که انسانها با آن صحبت میکنند، همگی زبانهای انسانی هستند. برای ارتباط با ماشینها یا هر قطعه، دستگاه یا سیستم دیجیتالی، باید از زبان قابل فهم توسط ماشین استفاده شود. به این زبان، باینری یا دودویی میگوییم! زبانی که تنها از دو جزء تشکیل شده: 0 و 1! همه اطلاعاتی که در رایانه یا موبایل خود دارید، از تصاویر گرفته تا صوتها، ویدیوها، بازیها و حتی پیامکهایی که به دوستان خود میفرستید، همگی به صورت اعداد باینری ذخیره میشود.
در این مطلب از وبلاگ سبزلرن، به معرفی کامل باینری یا سیستم دودویی میپردازیم. مطالعه این مطلب برای دانشجویان هرکدام از رشتههای کامپیوتر و افرادی که علاقمند به درک عمیق برنامه نویسی هستند، توصیه میشود.
سیستم عددی باینری چیست؟
پایهایترین ابزار برای شمارش، تعداد انگشتان انسان است. از آنجایی که انسانها دارای 10 انگشت هستند، سیستم شمارش آنها نیز بر مبنای 10 است. این سیستم را با نام سیستم اعداد دهدهی یا دسیمال (Decimal) میشناسیم. برای مثال، در دوران دبستان به کودکان شمارش بر مبنای 10 به صورت واحدهای یکان، دهگان، صدگان، هزارگان و… آموزش داده میشود تا با استفاده از آن، بتوانند اعداد را تشخیص داده و آنها را براساس سیستم دهدهی تعریف کنند.
اما ماشینها با همان تجهیزات دیجیتالی، نه دارای انگشت هستند و نه میتوانند به تنهایی، شمارش را انجام دهند. آنها دارای مدارهای الکتریکی هستند که تنها دو حالت ممکن دارند: خاموش و روشن! به همین دلیل، سیستم اعداد استفاده شده در ماشینها باید بر مبنای 2 باشد که به آن سیستم دودویی یا باینری گفته میشود. کل محاسبات انجام شده توسط رایانهها، در واقع همین اعداد 0 و 1 هستند که در حافظه آنها ذخیره شدهاند. اگر ترانزیستور خاموش باشد، عدد 0 و اگر روشن باشد، عدد 1 در حافظه ذخیره میشود.
تعریف سیستم دودویی به زبان ساده
سیستم دودویی یا باینری، سادهترین و بنیادیترین روش نمایش اطلاعات در دنیای دیجیتال است. برخلاف انسانها که از ده رقم (0 تا 9) برای شمارش استفاده میکنند، کامپیوترها فقط با دو رقم 0 و 1 کار میکنند. علت استفاده از سیستم باینری، این است که ساختار فیزیکی کامپیوتر بر پایه جریان برق عمل میکند و هر مدار تنها میتواند در یکی از دو حالت روشن یا خاموش باشد. این دو حالت با اعداد 1 (روشن) و 0 (خاموش) نمایش داده میشوند.
تجهیزات دیجیتال دارای یک مغز پردازشی به نام CPU هستند که روی برد اصلی دستگاه نصب میشود. هر پردازنده دارای میلیاردها واحد پردازشی بسیار کوچک به نام ترانزیستور است. ترانزیستور را میتوان “کوچکترین جزء منطقی” درون پردازنده دانست. این قطعه میتواند جریان برق را عبور دهد یا قطع کند. وقتی جریان عبور میکند، مدار در حالت روشن است و کامپیوتر آن را به صورت عدد 1 میشناسد. وقتی جریان عبور نمیکند، مدار در حالت خاموش است و کامپیوتر آن را به صورت عدد 0 تفسیر میکند. به این صورت، کامپیوترها میتوانند هر نوع اطلاعات را نمایش دهند. از اعداد ساده در مبنای 10 گرفته تا حروف، تصاویر، ویدیوها، کارهای انجام شده توسط موس و کیبورد و هرکاری که تجهیزات دیجیتالی قادر به انجام آنها هستند!
مقایسه باینری با سیستم دهدهی (Decimal)
همانطور که قبلا اشاره کردیم، در سیستم دهدهی ارزش مکانی هر رقم 10 برابر رقم سمت راستی است؛ اما در سیستم باینری، هر رقم 2 برابر رقم سمت راست خود ارزش دارد. برای مثال، بیایید عدد 1423 را در هر دو سیستم اعداد تشریح کنیم.
در سیستم دهدهی، به این صورت خواهد بود که:

اما در اعداد باینری، عدد 1423 مساوی با مقدار 10110001111 خواهد بود. با استفاده از تصویر زیر میتوانید نحوه تفسیر این عدد به صورت باینری را مشاهده کنید!

ساختار اعداد در سیستم باینری
ساختار اعداد در باینری بر پایهی توانهای عدد 2 بنا شده است. به جای اینکه مثل سیستم دهدهی هر رقم براساس توانهای عدد 10 سنجیده شود، در باینری هر رقم تنها دو حالت دارد: 0 یا 1! و هر جایگاه عدد، ارزشش برابر با یکی از توانهای 2 است. این یعنی هرچه به سمت چپ میرویم، ارزش رقم مربوطه 2 برابر میشود. اما هر رقم و مجموعهای از ارقام در باینری، دارای اسم خاصی هستند که با نام بیت و بایت شناخته میشوند.
بیت (Bit) و بایت (Byte) در باینری چیست؟
تا اینجای این مطلب مدام از واژه سیستم دودویی یا در مبنای دو استفاده کردیم. اما در مکالمات عادی روزمره، نوشتن مداوم آن میتواند خسته کننده باشد. برای رفع این مشکل، از عبارت بیت (Bit) استفاده میکنیم. اما منظور از بیت در باینری چیست؟
بیت کوچکترین واحد اطلاعات در کامپیوتر است و فقط میتواند یکی از دو حالت را داشته باشد: 0 یا 1. هر بیت در واقع نشاندهندهی وضعیت یک ترانزیستور است (روشن یا خاموش). بهطور مثال، اگر بخواهیم فقط بدانیم چراغی روشن است یا خاموش، به یک بیت اطلاعات نیاز داریم.
اما برای نمایش دادههای واقعی مثل عدد، حرف یا رنگ، یک بیت کافی نیست. به همین دلیل، بیتها در گروههای هشتتایی جمع میشوند و تشکیل یک بایت (Byte) میدهند. هر بایت شامل 8 بیت است و میتواند ترکیبی از صفر و یکها را در خود داشته باشد. با 8 بیت میتوان 256 حالت مختلف (از 0 تا 255) ساخت.
برای نمونه، حرف A در جدول کد ASCII (جدول تبدیل کاراکترها به عدد برای فهم کامپیوترها) برابر با عدد 65 است، که در باینری بهصورت 01000001 نوشته میشود؛ یعنی دقیقاً 8 بیت یا یک بایت. بنابراین، هر بار که در کامپیوتر یک حرف تایپ میکنید، در واقع یک بایت اطلاعات تولید میشود.

برای اشاره به حجم زیادی از کیلوبایت، باید تعداد آنها برابر با 2 به توان 10 باشد؛ یعنی 1024 عدد! این یعنی هر کیلوبایت برابر با 1024 بایت است. هر مگابایت برابر با 1024 کیلوبایت و هر گیگابایت برابر با 1024 مگابایت است!
نحوه نمایش و شمارش در باینری (با مثال ساده)
در بالا اشاره کردیم که هر عدد در سیستم باینری، 2 برابر رقم سمت راستی خود ارزش دارد. بیایید از یک مثال برای درک بهتر این قضیه استفاده کنیم. مقدار باینری 1101 را در نظر بگیرید. برای تبدیل این مقدار به یک عدد در مبنای 10، از سمت راست شروع میکنیم:
- رقم اول از سمت راست (1): ارزشش برابر 1 است. زیرا 2 به توان 0 برابر است با 1.
- رقم دوم (1): ارزشش برابر 2 است. زیرا 2 به توان 1 برابر است با 2.
- رقم سوم (0): ارزشش برابر 4 است. زیرا 2 به توان 2 برابر است با 4؛ ولی چون رقم صفر است در جمع در نظر گرفته نمیشود.
- رقم چهارم (1): ارزشش برابر 8 است. زیرا 2 به توان 3 برابر است با 8.
- در نتیجه 1 + 2 + 8 = عدد 11
در نتیجه میتوان برداشت کرد که هر رقم در سیستم دودویی، تعیین میکند که آیا مقدار آن توان از عدد 2 در جمع نهایی وجود دارد یا نه. اگر رقم 1 باشد، آن مقدار در جمع لحاظ میشود؛ اگر 0 باشد، نادیده گرفته میشود. با همین منطق ساده، کامپیوتر میتواند هر عددی را تنها با صفر و یک نمایش دهد و همهی محاسبات ریاضی را بر همین پایه انجام دهد.
تبدیل بین مبناها
تبدیل اعداد بین مبناهای مختلف، یکی از شیرینترین تجربیاتی است که در علوم کامپیوتر میتوان کسب کرد؛ زیرا دارای فرمول زیبا و سادهای است. برای کار با دادهها و برنامه نویسی، گاهی لازم است بین این دو مبنا تبدیل انجام دهیم تا اعداد را بهتر درک کنیم یا به سیستم کامپیوتر منتقل کنیم. در ادامه به صورت کامل تشریح میکنیم که فرمول تبدیل اعداد دهدهی به باینری چیست؟ و عمل برعکس آن را هم به زبان ساده توضیح میدهیم!
تبدیل عدد باینری به دسیمال (دهدهی)
تبدیل از باینری به دسیمال به این صورت انجام میشود که هر رقم باینری در جایگاه خودش ضرب در ارزش آن موقعیت شود و سپس جمع این مقادیر به دست آید. به زبان ساده، هر رقم باینری نشان میدهد که مقدار توان مشخصی از 2 در عدد موجود است یا خیر.
برای مثال، مقدار 100110 را در نظر بگیرید.
اولین رقم 0 = ارزش 1 ولی چون صفر است، نادیده گرفته میشود.
دومین رقم 1 = ارزش 2
سومین رقم 1 = ارزش 4
چهارمین رقم 0 = ارزش 8 نادیده گرفته میشود.
پنجمین رقم 0 = ارزش 16 نادیده گرفته میشود.
ششمین رقم 1 = ارزش 32
حالا فقط اعداد مربوط به رقمهای 1 را با هم جمع میکنیم: 2 + 4 + 32 = 38
پس 100110 در باینری برابر با 38 در دسیمال است. این روش ساده، قابل فهم و کاربردی برای همه اعداد است و مخصوصا برای درک عملکرد کامپیوترها مهم است.
تبدیل دسیمال به باینری
برای تبدیل یک مقدار دهدهی به باینری، یک فرمول خیلی ساده وجود دارد که با نام “تقسیمهای متوالی بر 2” شناخته میشود. . کافیست عدد مورد نظر را بر 2 تقسیم کنید تا زمانی که مقدار خارج از قسمت برابر با 0 شود. برای مثال، عدد 483 را در نظر بگیری. در هر مرحله این عدد را تقسیم بر 2 کنید و روند زیر را دنبال کنید:
- خارج از قسمت 483 و باقیمانده 1
- خارج از قسمت: 241 و باقیمانده 1
- خارج از قسمت: 120 و باقیمانده 0
- خارج از قسمت: 60 و باقیمانده 0
- خارج از قسمت: 30 و باقیمانده 0
- خارج از قسمت: 15 و باقیمانده 1
- خارج از قسمت: 7 و باقیمانده 1
- خارج از قسمت: 3 و باقیمانده 1
- خارج از قسمت: 1 و باقیمانده 1
حالا عدد باقی ماندهها را از آخر به اول کنار یکدیگر قرار میدهیم. خروجی نهایی به صورت 111100011 خواهد بود که برابر با عدد 483 در مبنای 10 است.
معرفی ابزارها یا روشهای سریع تبدیل
شاید زمانی برسد که فرصت محدودی برای تبدیل اعداد بین دو مبنا داشته باشید و بپرسید سریعترین روش برای تبدیل اعداد دسیمال به باینری چیست؟
اگر از ویندوز استفاده میکنید، کافیست وارد برنامه ماشین حساب (Calculator) شده و از قسمت View، نوع نمای ماشین حساب را روی Programmer قرار دهید. سپس از طریق بخش سمت چپ، نوع ورودی را تعیین کرده و مقدار موردنظرتان را وارد کنید. سپس با تغییر نوع دیتای ورودی، معادل آن به هگزادسیمال (مبنای 16)، اکتال (مبنای 8)، دسیمال و باینری وجود دارد.
در اندروید نیز میتوانید از قابلیتهای پیشفرض موجود در برنامه ماشین حساب استفاده کنید. اگر در غیر این صورت، میتوانید از یک اپلیکیشن تبدیل اعداد مثل Binary Calculator Hex Decimal یا نرم افزارهای تبدیل واحدها استفاده کنید!

کاربردهای سیستم باینری در برنامه نویسی و کامپیوتر
- نمایش دادهها: همه اطلاعات دیجیتال شامل اعداد، حروف، تصاویر و صداها در کامپیوتر به صورت رشتهای از صفر و یک ذخیره میشوند. این نمایش باینری باعث میشود دادهها برای پردازش، ذخیرهسازی و انتقال بین دستگاهها استاندارد و قابل فهم باشند.
- پردازش منطقی: کامپیوتر با استفاده از عملیات منطقی مانند AND، OR، NOT و XOR روی بیتها تصمیمگیری را انجام و الگوریتمها را اجرا میکند. این پردازشهای باینری پایه همه عملیات حسابی و منطقی در برنامهها و سختافزار هستند.
- آدرسدهی حافظه: هر خانه حافظه کامپیوتر یک آدرس باینری دارد تا اطلاعات دقیقاً در محل درست ذخیره یا خوانده شوند. این آدرسدهی باعث میشود پردازنده بتواند با سرعت بالا دادهها را مدیریت کند و عملکرد سیستم بهینه باشد.
- برنامهنویسی سطح پایین: زبانهای اسمبلی و ماشین مستقیماً با دادههای باینری کار میکنند. این روش برنامهنویسی نزدیک به سختافزار است و به برنامهنویس اجازه میدهد کنترل دقیق روی حافظه، پردازنده و عملکرد کامپیوتر داشته باشد.
- کدگذاری و فشردهسازی: اطلاعات و فایلهای دیجیتال با سیستم باینری کدگذاری و فشرده میشوند. این کار باعث کاهش حجم دادهها، افزایش سرعت انتقال و جلوگیری از خطا در ذخیرهسازی و انتقال اطلاعات بین کامپیوترها و شبکهها میشود.
- شبکه و انتقال داده: دادهها هنگام ارسال از طریق اینترنت یا شبکه به بیتهای صفر و یک تبدیل میشوند. این روش تضمین میکند که اطلاعات در مسیر انتقال حفظ شده و توسط دستگاههای مختلف به صورت صحیح دریافت و پردازش شوند.
- عملیات سختافزاری: پردازندهها و مدارهای الکترونیکی محاسبات و منطق را با استفاده از بیتهای صفر و یک انجام میدهند. بدون سیستم باینری، طراحی مدارات دیجیتال و اجرای سریع عملیات حسابی و منطقی در کامپیوتر غیرممکن میشد.
عملیات ریاضی در باینری
قبول دارم عنوان این قسمت از مطلب کمی ترسناک و سخت به نظر میرسد؛ اما اگر کمی با آن کار کنید، متوجه میشوید که اصلا اینطور نیست. حداقل در 4 عمل اصلی ریاضیات (جمع، تفریق، ضرب و تقسیم) با روند سادهای سروکار داریم که حتی سادهتر از سیستم دهدهی است. چرا؟ چون در اینجا تنها با دو عدد 0 و 1 سروکار داریم و کافیست بسته به نیاز، آنها را جابجا کنیم! قبل از شروع، بهتر است بدانید که عملیات جمع در باینری، براساس مفهوم حمل است و در تفریق اعداد باینری، این مفهوم به قرض گرفتن تبدیل میشود.
جمع اعداد در سیستم باینری
برای انجام عملیات جمع در سیستم باینری، 4 قانون ساده وجود دارد.
- 0 + 0 = 0
- 1 + 0 = 1
- 0 + 1 = 1
- 1 + 1 = 0 (مقدار 1 به مقدار بعدی اضافه میشود)
برای مثال، اگر بخواهیم عبارت 7 + 3 را به صورت باینری بنویسیم، چیزی شبیه به این میشود:
0111 + 0011 = 1010
تفریق اعداد در سیستم باینری
برای تفریق اعداد، 4 قانون مشخص وجود دارد. همچنین در تفریق باینری از مفهوم قرض گرفتن از رقم بزرگتر استفاده میکنیم. چیزی مشابه روش جمع و تفریق ستونی در ریاضیات پایه!
- 0 – 0 = 0
- 1 – 0 = 1
- 1 – 1 = 0
- 0 – 1 = 1 (از مقدار بعدی قرض گرفته میشود)
برای مثال، تصور کنید عبارت 14 – 5 را داریم. در این حالت باید:
1110 - 0101 = 1001
ضرب اعداد در سیستم باینری
در زمان ضرب، قوانین کاملا ساده هستند. اگر در یک طرف ضرب مقدار 0 باشد، حاصل آن همواره 0 خواهد بود. تنها در شرایطی مقدار خروجی برابر با 1 است که هر دو عامل ضرب، مقدار 1 داشته باشند.
سپس همانند ضرب در مبنای دهدهی، هر رقم از عدد پایین در تمام ارقام عدد بالا ضرب میشود و نتایج در ردیفهای بعدی نوشته و جمع میشوند.
برای مثال، ضرب 2 در 5 را درنظر بگیرید:
10 * 101 = 000 + 1010 = 1010
تقسیم اعداد در سیستم باینری
در تقسیم، بهترین کار استفاده ار روش تقسیم چکشی است. همچنین برای انجام این عملیات، نیاز به تفریق داریم. در هر مرحله، باید به تعداد اعداد مقسومعلیه، از سمت چپ مقسوم جداسازی انجام دهیم. اگر مقدار مقسوم بزرگتر یا مساوری با مقسومعلیه باشد، مقدار 1 را در خارج از قسمت قرار میدهیم. در غیر این صورت مقدار 0 قرار میدهیم. علاوه بر این، تقسیم ممکن است دارای باقیمانده باشد. در این حالن مقدار باقیمانده در انتهای تقسیم مشخص میشود.
برای مثال تقسیم عدد 11 بر 2 را درنظر بگیرید:
1011 / 10
در اولین مرحله، دو رقم از سمت چپ مقسوم جدا میکنیم که برابر با 10 است. از آنجایی که این مقسوم در اینجا مساوی مقسومعلیه است، در خارج قسمت عدد 1 را قرار داده و مقدار 10 را از 10 کم میکنیم که برابر با 00 میشود.
حالا رقم سوم مقسوم را وارد میکنیم که آن را برابر با 01 میکند. از آنجایی که این مقدار کوچکتر از مقسومعلیه است، مقدار 0 را به خارج قسمت اضافه میکنیم
در قدم بعد، مقدار 1 که آخرین رقم در مقسوم است را در قرار میدهیم که برابر با 11 میشود و ضمن اضافه کردن مقدار 1 به خارج قسمت، تفریق را انجام میدهیم. باقیمانده این عمل، مقدار 01 است. این یعنی تقسیم ما دارای باقیمانده 1 خواهد بود. حالا مقدار خارج قسمت را بررسی میکنیم که میشود 101. این مقدار برابر با عدد 5 خواهد بود. یعنی عدد 11، 5 برابر عدد 2 بوده و یک واحد نیز باقیمانده دارد.
باینری در سطوح پایینتر سیستم
در سطح پایین سیستمهای دیجیتال، سیستم باینری زبان اصلی سخت افزار کامپیوتر محسوب میشود. همه پردازندهها، حافظهها و مدارها فقط دو وضعیت را تشخیص میدهند: وجود جریان برق (1) و نبود آن (0). همین دو حالت ساده پایهی تمام محاسبات، پردازشها و ذخیرهسازیهای عظیمی هستند که توسط رایانهها انجام میشوند.
وقتی میگوییم کامپیوتر عددی را ذخیره یا محاسبه میکند، در واقع مجموعهای از سیگنالهای الکتریکی یا مغناطیسی درون تراشهها فعال و غیرفعال میشوند. هر بیت، نمایندهی یکی از این حالتهاست. مجموعهی این بیتها در کنار هم، دادههای بزرگتر مثل عدد، حرف یا تصویر را تشکیل میدهند.
به زبان ساده، اگر سیستم کامپیوتر را مثل یک شهر در نظر بگیریم، عدد 0 یعنی «چراغ خاموش» و عدد 1 یعنی «چراغ روشن». میلیاردها چراغ با الگوهای مختلف، اطلاعاتی را شکل میدهند که ما آن را بهصورت متن، صدا، تصویر و برنامههای نرمافزاری میبینیم.
سوالات متداول
پاسخ: برای اکثر زبانهای برنامهنویسی، نیازی به تسلط کامل بر باینری نیست، چون کامپایلر یا مفسر خودش تبدیلها را انجام میدهد. اما درک پایهای از باینری کمک میکند بهتر بفهمید دادهها چگونه ذخیره و پردازش میشوند، مخصوصاً در مباحثی مانند حافظه، الگوریتمها یا سطح پایین سیستم.
پاسخ: عدد 13 را بهصورت متوالی بر 2 تقسیم میکنیم و باقیماندهها را از پایین به بالا مینویسیم. باقیماندهها به ترتیب 1، 0، 1 و 1 هستند، پس عدد باینری آن میشود 11012. یعنی 13 در مبنای دهدهی برابر با 1101 در مبنای دو است.
پاسخ: باینری از دو رقم (0 و 1) برای نمایش دادهها استفاده میکند، در حالیکه هگزادسیمال از شانزده رقم (0 تا 9 و A تا F) استفاده میکند. هگزادسیمال نسخهی فشردهتری از باینری است و برای نمایش دادهها در برنامهنویسی، شبکه و سختافزار خواناتر و کوتاهتر بهکار میرود.
پاسخ: خیر، باینری فقط در ابتدا کمی متفاوت به نظر میرسد چون بهجای 10 رقم، فقط 2 رقم دارد. وقتی مفهوم شمارش بر پایهی 2 را درک کنید، یادگیری آن بسیار ساده میشود. حتی میتوان با تمرین چند مثال عددی، تبدیلها را بهراحتی انجام داد.
پاسخ: بله، در سطح فنی همه اطلاعات در شبکه بهصورت باینری منتقل میشود. بستههای داده، آدرسهای IP، و حتی رمزنگاری اطلاعات در نهایت به رشتههایی از صفر و یک تبدیل میشوند. دانستن مفهوم باینری به درک بهتر ساختار داده و امنیت شبکه کمک میکند.
پاسخ: کد ASCII در واقع جدولی است که هر کاراکتر (مثل A، @ یا عدد 5) را به یک عدد خاص تبدیل میکند. این عدد سپس در حافظه بهصورت باینری ذخیره میشود. بهعبارتی، باینری همان زبانی است که کامپیوتر از طریق آن کاراکترهای ASCII را میفهمد.
پیشنهاد مطالعه
نظری برای این مقاله ثبت نشده است