باینری چیست و چگونه از آن در علوم کامپیوتر استفاده می‌شود؟

26058
باینری چیست؟

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

از آنجایی که انسان‌ها 10 انگشت دارند، سیستم عددی که برای شمارش از آن استفاده می‌کنند، در مبنای 10 است. به‌عنوان مثال عدد 1853 در مبنای 10 به این صورت تولید می‌شود:

ارزش مکانی ارقام عدد ۱۸۵۳ در مبنای ده

هر یک از ارقام 0 تا 9 در یک عدد در مبنای 10، در ده به توان عددی که متناظر با ارزش مکانی آن است، ضرب می‌شود. توجه کنید که ارزش هر رقم 10 برابر ارزش رقم سمت راست آن است.

اعداد باینری چیست؟

اما کامپیوترها که انگشتی برای انجام محاسبات ندارند چه کار باید بکنند؟ کامپیوترها به‌جای انگشت از مدارهایی الکتریکی استفاده می‌کنند که فقط دو حالت برای کارکردن دارند؛ یا روشن هستند یا خاموش. بنابراین سیستم اعداد طبیعی مورداستفاده در یک کامپیوتر الکترونیکی در مبنای 2 است و به آن سیستم اعداد باینری یا دودویی گفته می‌شود. برخلاف شما که برای محاسبه از ده رقم استفاده می‌کنید (0، 1، 2، 3، 4، 5، 6، 7، 8، 9)، کامپیوترها فقط از دو رقم 0 و 1 برای انجام محاسبات و پردازش استفاده می‌کنند. در حافظه‌ی یک کامپیوتر، یک ترانزیستورِ روشن (رسانای جریان) نشان‌دهنده‌ی 1 و ترانزیستور خاموش، نشان‌دهنده‌ی 0 است. 

واژه‌ی Binary از ریشه‌ای لاتین به معنای «دوتایی» آمده است و در فارسی آن را «دودویی» می‌نامیم. پس «سیستم باینری»، «سیستم دودویی»، «سامانه‌ی دودویی» و «مبنای ۲» همه نام‌های یک مفهوم‌اند: روشی برای نمایش اعداد و داده‌ها فقط با دو رقم ۰ و ۱. 

به‌عنوان مثال عدد باینری 11100111101 این‌گونه تفسیر می‌شود:

تبدیل عدد باینری 11100111101 به ۱۸۵۳ در مبنای ده

همان‌طور که می‌بینید، 11100111101 در مبنای 2 معادل عدد 1853 در مبنای 10 است:

1853 \: (base 10)  =  11100111101 \: (base 2)

توجه داشته باشید که در سیستم باینری، ارزش هر عدد دو برابر ارزش رقم سمت راست آن است؛ زیرا این اعداد در مبنای 2 هستند. به خاطر بیاورید که ارزش‌گذاری ارقام در مبنای 10 چگونه انجام می‌شد.

از آنجایی که استفاده از اصطلاح «رقم دودویی» سخت بود، اصطلاح کوتاه‌ترِ بیت (bit) معرفی شد. هر بیت یک عدد باینری است و می‌تواند مقداری برابر با 1 یا 0 داشته باشد. رشته‌ای از بیت‌ها، می‌تواند معرف اعداد بزرگتر باشد؛ همان طور که ما برای بیان اعداد بزرگتر از 9 از رشته‌هایی از اعداد در مبنای 10 استفاده می‌کنیم.

تبدیل عدد ده‌دهی به باینری

برای پیدا کردن معادل باینری یک عدد، آن را پشت‌سرهم بر ۲ تقسیم کنید و هر بار باقی‌مانده را که ۰ یا ۱ است یادداشت کنید. این کار را با خارج‌قسمت ادامه دهید تا به صفر برسید. در پایان باقی‌مانده‌ها را از آخر به اول بخوانید. برای عدد ۱۳:

تقسیم خارج‌قسمت باقی‌مانده
۱۳ ÷ ۲ ۶ 1
۶ ÷ ۲ ۳ 0
۳ ÷ ۲ ۱ 1
۱ ÷ ۲ ۰ 1

خواندن باقی‌مانده‌ها از پایین به بالا عدد 1101 را می‌دهد. برای اطمینان: ۸ + ۴ + ۰ + ۱ = ۱۳. روش‌های دیگر و تبدیل به مبناهای دیگر را در مقاله‌ی تبدیل مبنا؛ چطور مبناها را به یکدیگر تبدیل کنیم؟ ببینید.

جدول اعداد باینری ۰ تا ۱۵

با چهار بیت می‌توان ۱۶ عدد مختلف، از ۰ تا ۱۵، را نمایش داد. ستون آخر همان عدد را به شکل چهاربیتی و با صفرهای ابتدایی نشان می‌دهد.

عدد ده‌دهی باینری باینری چهاربیتی
۰ 0 0000
۱ 1 0001
۲ 10 0010
۳ 11 0011
۴ 100 0100
۵ 101 0101
۶ 110 0110
۷ 111 0111
۸ 1000 1000
۹ 1001 1001
۱۰ 1010 1010
۱۱ 1011 1011
۱۲ 1100 1100
۱۳ 1101 1101
۱۴ 1110 1110
۱۵ 1111 1111
نمایش اعداد ۰ تا ۲۵۵ با یک بایت در سیستم دودویی
نمایش باینری اعداد

کاربردی‌ترین واحد اندازه‌گیری حافظه‌ی کامپیوتری معادل 8 بیت است. از این تعداد بیت از حافظه می‌توان برای نمایش هر عددی از بازه صفر (00000000) تا 255 (11111111) استفاده کرد. 11111111 در مبنای 2 برابر با 255 در مبنای 10 است:

(1\times 128) + (1\times 64) + (1\times 32) + (1\times 16) + (1\times 8) + (1\times 4) + (1\times 2) + (1\times 1) = 255

همچنین به یک واحد حافظه به طول 8 بیت، بایت (byte) گفته می‌شود. یک بایت، واحدی است که برای محاسبه‌ی میزان حافظه‌ی کامپیوترها استفاده می‌کنیم. واحدی از حافظه با طول 4 بیت نیبل (nybble) نامیده می‌شود که چندان کاربردی نیست. اما چرا 8 بیت کاربردی‌ترین طول حافظه محسوب می‌شود؟ استاندارد ASCII برای نمایش حروف انگلیسی، ارقام و علامت‌ها به 7 بیت نیاز دارد. 8 بیت، یعنی یک بایت، این کدها را با یک بیت اضافه در خود جا می‌دهد و خودش هم توانی از 2 است؛ همین‌ها آن را به واحد استاندارد حافظه تبدیل کرد.

کد باینری چیست؟

کد باینری روشی برای نمایش هر نوع داده فقط با دو نماد ۰ و ۱ است. هر رقم در این کد یک بیت است و هر ۸ بیت یک بایت را می‌سازد. عدد، حرف، تصویر، صدا و حتی دستورهای برنامه‌ها در کامپیوتر همه به رشته‌هایی از صفر و یک تبدیل می‌شوند تا بتوان آن‌ها را ذخیره، پردازش و منتقل کرد.

حالا سؤالی که پیش می‌آید این است که کاراکترهای متنی چگونه در حافظه‌ی کامپیوتر به‌صورت اعداد نمایش داده می‌شوند؟ برای این کار نیازمند روشی برای معادل‌سازی حروف به اعداد هستیم. سیستم مورداستفاده برای این کار کدگذاری اَسکی (ASCII یا American Standard Code for Information Interchange) است. حرف A بزرگ با عدد 65 در کد اسکی نمایش داده می‌شود (65 در سیستم باینری معادل 01000001 است). 65 کدِ اولِ اسکی (0 تا 64) برای مجموعه‌ای از کاراکترهای کنترلی و کاراکترهای خاص استفاده می‌شوند، بنابراین حرف A بزرگ معادل 65امین کاراکتر اسکی است. حرف B بزرگ معادل 66 (01000010) است و به همین منوال تا پایان ادامه می‌یابد.

جدول کد اسکی و معادل باینری حروف انگلیسی
نمایش ASCII کاراکترها

جدول کد باینری حروف انگلیسی

در جدول زیر کد ASCII و معادل باینری هشت‌بیتی همه‌ی حروف انگلیسی آمده است. حروف کوچک دقیقاً ۳۲ واحد بعد از حروف بزرگ قرار دارند؛ برای همین کد باینری A و a فقط در یک بیت با هم فرق دارد.

حرف بزرگ ده‌دهی باینری حرف کوچک ده‌دهی باینری
A ۶۵ 01000001 a ۹۷ 01100001
B ۶۶ 01000010 b ۹۸ 01100010
C ۶۷ 01000011 c ۹۹ 01100011
D ۶۸ 01000100 d ۱۰۰ 01100100
E ۶۹ 01000101 e ۱۰۱ 01100101
F ۷۰ 01000110 f ۱۰۲ 01100110
G ۷۱ 01000111 g ۱۰۳ 01100111
H ۷۲ 01001000 h ۱۰۴ 01101000
I ۷۳ 01001001 i ۱۰۵ 01101001
J ۷۴ 01001010 j ۱۰۶ 01101010
K ۷۵ 01001011 k ۱۰۷ 01101011
L ۷۶ 01001100 l ۱۰۸ 01101100
M ۷۷ 01001101 m ۱۰۹ 01101101
N ۷۸ 01001110 n ۱۱۰ 01101110
O ۷۹ 01001111 o ۱۱۱ 01101111
P ۸۰ 01010000 p ۱۱۲ 01110000
Q ۸۱ 01010001 q ۱۱۳ 01110001
R ۸۲ 01010010 r ۱۱۴ 01110010
S ۸۳ 01010011 s ۱۱۵ 01110011
T ۸۴ 01010100 t ۱۱۶ 01110100
U ۸۵ 01010101 u ۱۱۷ 01110101
V ۸۶ 01010110 v ۱۱۸ 01110110
W ۸۷ 01010111 w ۱۱۹ 01110111
X ۸۸ 01011000 x ۱۲۰ 01111000
Y ۸۹ 01011001 y ۱۲۱ 01111001
Z ۹۰ 01011010 z ۱۲۲ 01111010

برای نوشتن یک کلمه، کد حروف را پشت سر هم می‌گذاریم. مثلاً کلمه‌ی Hi از دو بایت ساخته می‌شود: حرف H با کد 01001000 و پس از آن حرف i با کد 01101001.

کد باینری حروف فارسی

ASCII فقط برای حروف انگلیسی طراحی شده است و حروف فارسی، ژاپنی یا بیشتر زبان‌های دیگر در آن جایی ندارند. برای این زبان‌ها از یونیکد (Unicode) استفاده می‌شود؛ استانداردی که به هر حرف از تقریباً همه‌ی خط‌های دنیا یک شماره‌ی یکتا می‌دهد. اینکه این شماره با چند بایت ذخیره شود، به روش کدگذاری بستگی دارد. در صفحه‌های وب رایج‌ترین روش UTF-8 است که حروف انگلیسی را با یک بایت و حروف فارسی را با دو بایت ذخیره می‌کند. جدول زیر چند حرف فارسی را نشان می‌دهد:

حرف شماره‌ی یونیکد کد باینری در UTF-8 (دو بایت)
ا U+0627 11011000 10100111
ب U+0628 11011000 10101000
پ U+067E 11011001 10111110
ت U+062A 11011000 10101010
ج U+062C 11011000 10101100
د U+062F 11011000 10101111
ر U+0631 11011000 10110001
س U+0633 11011000 10110011
ش U+0634 11011000 10110100
گ U+06AF 11011010 10101111
م U+0645 11011001 10000101
ن U+0646 11011001 10000110
و U+0648 11011001 10001000
ه U+0647 11011001 10000111
ک (فارسی) U+06A9 11011010 10101001
ك (عربی) U+0643 11011001 10000011
ی (فارسی) U+06CC 11011011 10001100
ي (عربی) U+064A 11011001 10001010

«ی» فارسی و «ي» عربی، با اینکه در بیشتر قلم‌ها شبیه هم دیده می‌شوند، در یونیکد دو حرف جدا با کدهای متفاوت‌اند. «ک» فارسی و «ك» عربی هم همین وضع را دارند، و این یکی از دلایل رایج ناهماهنگی در جست‌وجوی متن فارسی است.

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

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

زبان باینری چیست؟

«زبان باینری» اصطلاحی غیررسمی برای شکلی از دستورها و داده‌هاست که سخت‌افزار کامپیوتر مستقیماً با آن کار می‌کند. به این شکل زبان ماشین هم می‌گویند. هر پردازنده مجموعه‌ای از دستورهای پایه دارد و هر دستور با یک الگوی مشخص از صفر و یک شناخته می‌شود.

برنامه‌نویس‌ها معمولاً مستقیم با صفر و یک برنامه نمی‌نویسند. کد را با زبان‌های برنامه‌نویسی مثل پایتون یا C می‌نویسند و ابزارهایی مثل کامپایلر و مفسر آن را در نهایت به دستورهای باینری قابل‌اجرا برای ماشین تبدیل می‌کنند.

چرا همه‌چیز به دو حالت ختم می‌شود؟ تشخیص دو حالت برای مدار الکترونیکی ساده و قابل‌اطمینان است. اگر مدار باید ده سطح ولتاژ مختلف را از هم تشخیص می‌داد، نوسان یا نویز کوچک می‌توانست یک رقم را با رقم دیگر اشتباه کند. منطق صفر و یک با منطق «درست و نادرست» در ریاضیات، یعنی جبر بول، هم هم‌خوان است؛ برای همین عملیات منطقی را می‌توان مستقیم با مدارهای ساده ساخت.

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

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

یک کیلوبایت (KB) تقریباً معادل 1000 بایت و دقیقاً معادل 1024 بایت است. اما چرا عدد عجیبی مثل 1024؟ زیرا 1024 دقیقاً معادل 10000000000 در سیستم باینری است. یک مضرب مناسب از دو برای استفاده در کامپیوتر بسیار کاربردی است. بنابراین وقتی کامپیوتر به شما می‌گوید که فایل شما 40 کیلوبایت فضا اشغال کرده است، در واقع آن فایل 40960 بایت فضا اشغال کرده است نه 40000 بایت. دلیل این نام‌گذاری این است که یک کیلوبایت را می‌توان تقریباً معادل 1000 بایت در نظر گرفت.

طبق استاندارد بین‌المللی IEC، نام دقیق 1024 بایت «کیبی‌بایت» (KiB) است و کیلوبایت رسماً 1000 بایت است؛ اما بسیاری از سیستم‌عامل‌ها هنوز 1024 بایت را KB می‌نامند.

به همین صورت، شما می‌توانید یک مگابایت (MB) را تقریباً معادل یک میلیون بایت و دقیقاً معادل 1048576 بایت (1024\times 1024) در نظر بگیرید. یک گیگابایت (GB) نیز تقریباً معادل یک میلیارد بایت و دقیقاً معادل 1073741824 بایت است.

پرسش‌های متداول درباره‌ی باینری

دودویی یعنی چه؟

دودویی معادل فارسی «باینری» است و به سیستمی گفته می‌شود که فقط دو رقم دارد: ۰ و ۱. «سیستم دودویی» و «مبنای ۲» هم به همین معنا به کار می‌روند.

Binary به فارسی چه می‌شود؟

واژه‌ی Binary در فارسی «دودویی» یا «دوتایی» ترجمه می‌شود. در ریاضیات و علوم کامپیوتر منظور از آن معمولاً عددنویسی در مبنای ۲ است.

تفاوت بیت و بایت چیست؟

بیت کوچک‌ترین واحد داده است و فقط یکی از دو مقدار ۰ یا ۱ را دارد. بایت از ۸ بیت تشکیل می‌شود و ۲۵۶ حالت مختلف، یعنی اعداد ۰ تا ۲۵۵، را نمایش می‌دهد.

چطور یک عدد را به باینری تبدیل کنیم؟

عدد را پشت‌سرهم بر ۲ تقسیم کنید و باقی‌مانده‌ها را از آخر به اول بخوانید. مثال کامل و جدول اعداد ۰ تا ۱۵ در همین مقاله آمده است.

آیا برنامه‌نویس‌ها با صفر و یک برنامه می‌نویسند؟

معمولاً نه. برنامه‌ها با زبان‌های برنامه‌نویسی نوشته می‌شوند و کامپایلر یا مفسر آن‌ها را به زبان ماشین، یعنی دستورهای باینری، تبدیل می‌کند.

اگر هنوز مطمئن نیستید که یادگیری برنامه‌نویسی برایتان مناسب است یا نه، یا نمی‌دانید از کجا شروع کنید، ما یک کوییز ساده و جذاب آماده کرده‌ایم که می‌تواند به شما کمک کند مسیر درست را پیدا کنید.
همین حالا امتحان کنید: برنامه نویسی را از کجا شروع کنیم


ممکن است علاقه‌مند باشید: برنامه نویسی چیست؟، تاریخچه برنامه‌نویسی

بیشتر بخوانید: کلاینت چیست؟ با انواع کلاینت، مزایا و معایب آن‌ها آشنا شوید

آموزش برنامه نویسی با کوئرا کالج
کوئرا بلاگ

guest

5 دیدگاه‌
قدیمی‌ترین
تازه‌ترین بیشترین واکنش
Best Supreme
Best Supreme
3 سال قبل

ممنون خیلی متن خوبی بود ( زیاد تخصصی نمی‌گم چون بلد نیستم! ) ممنونم که با این متن ها ما رو سرگرم کردید و به ما آموختید و راز های پنهان برخی چیز ها رو بهمون نشون دادید!
اگر قلو گردم ببخشید دست خودم نبود🙂

حمید
حمید
2 سال قبل

درود و سپاس از توضیحات ساده و ارزشمند شما.

Sajad
Sajad
2 سال قبل

مرسی خیلی خوب توضیح دادین

امید اخلاصی
امید اخلاصی
2 سال قبل

عالی

مهیار
مهیار
2 سال قبل

سلام و درود فراوان به اساتید و سایت کوئرا کالج
مطلب فوق العاده و گیرا بود اما سوال برام پیش اومد که اگه هر بایت 8 بیته پس چرا شمما برای توضیح کیلو بایت از 11 رقم استفاده کردید؟
ممنون از شما