علم باینری

اعداد باینری | نقش اعداد دودویی در سیستمهای دیجیتال 8 دقیقه مطالعه
مزیتها و استفادهی گسترده از سیستمهای دیجیتالی باعث شده است که امروزه آشنایی با ساختار و نحوه ساز و کار این سیستمها برای همه کسانی که قصد مطالعه و پیگیری تکنولوژی را دارند، امری اجتنابناپذیر و ضروری باشد. در این مقاله از فنولوژی قصد داریم به بنیادیترین سنگبنای کل دنیای دیجیتال، یعنی «اعداد باینری» بپردازیم.
تاریخچهی اعداد باینری
استفاده از دستگاه نمایش اعداد دودویی یا اعداد باینری، در مدارهای سوئیچینگ و الکترونیک دیجیتال و ساختار کامپیوترها، عمری کمتر از ۱۵۰ سال دارد؛ با این حال، قدمت استفاده از اعداد دودویی در سایر عملیات ریاضی، مانند محاسبهی سریهای متناهی، علم وزن و عروض و همچنین پیامرسانی در تمدنهای باستانی مانند مصر، چین و هند به بیش از چهار هزار سال میرسد.
مطالعهی اعداد باینری به شکل مدرن، در قرن هفدهم میلادی با مشارکتهای علمی دانشمندان مختلفی از جمله لایبنیتز آغاز شد. لایبنیتز، بر پایه متون قدیمی چینی اقدام به معرفی سیستم اعداد دودویی نمود. میتوان گفت از اولین نمونههای بهرهمندی از سیستم نمایش اعداد با ارقام ۰ و ۱ به شکلی که ما امروزه میشناسیم، همین سیستم نمایش دودویی اعداد است که توسط لایبنیتز معرفی شد.
نقطهی عطف استفاده از اعداد باینری، اختراع جبر بول (Boolean Algebra) توسط جرج بول، ریاضیدان انگلیسی، در قرن نوزدهم میلادی بود. جبر بول، پایه و اساس استفادهی قاعدهمند از دستگاه اعداد باینری برای بیان و حل آسانتر مسائل منطق به روش جبری است. همچنین جبر بول، پایه و اساس اختراع مدارات سوئیچینگ و سیستمهای دیجیتال امروزی است.
سیستم اعداد باینری
در هر سیستم نمایش اعداد در مبنای $r$، به طور کلی $r$ رقم وجود دارد که شامل ۰ تا $r-1$ میشود. برای نمایش هر عدد بالاتر از این ارقام، باید از مفهوم «ارزش مکانی» استفاده شود. ارزش مکانی هر رقم برابر است با $r^$ که $n$ با شروع از صفر، شمارهی جایگاه رقم از سمت راست میباشد.
در اعداد مبنای دو، ارقام مورد استفاده ۰ و ۱ میباشند و ارزش مکانی جایگاه رقمها به ترتیب از راست به چپ $ \small \left. …,2^,2^,2^\right. $ میباشند.
اعداد باینری کسری
در صورتی که اعداد دودویی دارای قسمتهای کسری باشند؛ با استفاده از ممیز یا نقطه (Binary point) ارقام بخش صحیح از ارقام بخش کسری جدا میشوند و ارزش مکانی ارقام بخش کسری بعد از ممیز، از چپ به راست کاهش مییابد.
بنابراین ساختار ارزش مکانی اعداد باینری کسری به این صورت است: $ \small \left. …2^,2^,2^/2^,2^,2^… \right. $
تبدیل مبنا از اعداد باینری به اعداد دهدهی
برای تبدیل مبنا از اعداد باینری به اعداد دهدهی کافی است مراحل زیر را دنبال کنیم:
- ابتدا ارزش مکانی تمامی ارقام عدد دودویی را مشخص میکنیم.
- هر رقم را در ارزش مکانی آن ضرب میکنیم.
- حاصل ضربهای بدست آمده را با یکدیگر جمع میکنیم.
این روش تنها مختص به اعداد باینری نیست و برای هر عددی در مبنای غیر ده صحیح میباشد.
$\small\left.(1110)_ = 0\times2^ + 1\times2^ + 1\times2^ + 1\times2^ = 14\right.$
$\small\left.(100/01)_ = 1\times2^ + 0\times2^ + 0\times2^ + 0\times2^ + 1\times2^ = 4.25\right.$
تبدیل مبنا از اعداد دهدهی به اعداد باینری
برای تبدیل اعداد صحیح بدون علامت دهدهی به یک عدد در مبنای ۲ از روش تقسیمهای متوالی استفاده میشود. مراحل تقسیمهای متوالی عبارتند از:
- عدد دهدهی را بر ۲ تقسیم میکنیم.
- اگر خارجقسمت از صفر بزرگتر بود آن را بر ۲ تقسیم میکنیم.
این روند را آنقدر ادامه میدهیم تا در نهایت خارج قسمت تقسیم برابر با صفر شود. در پایان، باقیماندهی تقسیمهای انجام شده، ارقام عدد در سیستم دودویی را از راست به چپ (از پایینترین ارزش مکانی به بالاترین ارزش مکانی) تشکیل میدهند.
با توجه به محاسبات نشان داده شده:
همچنین برای تبدیل بخش اعشاری اعداد دهدهی به بخش کسری در مبنای ۲، از روش ضربهای متوالی استفاده میشود. در روش ضربهای متوالی، قسمت اعشاری را در عدد ۲ ضرب کرده و قسمت صحیح حاصلضرب را نگه میداریم و سپس مرحله قبل را برای قسمت اعشاری حاصلضرب تکرار میکنیم. به ترتیب قسمتهای صحیح حاصلضربهای متوالی از اول به آخر، ارقام عددکسری باینری را از چپ به راست (از بیشترین ارزش مکانی تا کمترین ارزش مکانی) تشکیل می دهند. این روند را تا جایی که دقت موردنظر برسیم یا قسمت اعشاری حاصلضرب بدست آمده صفر باشد، ادامه میدهیم.
تبدیل مبنای بخشهای صحیح و اعشاری اعداد، از یکدیگر مستقلاند؛ همچنین تبدیل اعداد اعشاری به اعداد کسری در مبنای غیر ده ممکن است مختوم نباشد.
برای مثال برای محاسبهی معادل باینری عددی اعشاری $ \small \left. 0.534 \right. $:
$\small\left.0.534\times2 = 1.068 \Rightarrow 1\right.$
$\small\left.0.068\times2 = 0.136 \Rightarrow 0\right.$
$\small\left.0.136\times2 =0.272 \Rightarrow 0\right.$
همانطور که نشان داده شد، عدد $ \small \left. 0.534 \right. $ در مبنای ۲ با دقت سه رقم، برابر با $ \small \left. 0/100 \right. $ میباشد؛ اما همانطور که گفته شد، ممکن است این عدد در مبنای دو نمایش مختوم نداشته باشد.
تبدیل از مبنای $۲$ به مبنای $۲^$
به طور کلی، برای تبدیل مبنا بین دو مبنای غیر ده، باید از مبنای ده به عنوان واسطه استفاده کرد؛ اما در مورد تبدیل مبنا میان اعداد در مبنای $۲$ و توانهای صحیح $۲$، یک استثنا وجود دارد.
برای تبدیل یک عدد از مبنای $۲$ به مبنای $۲^$:
- در صورتی که تعداد ارقام قبل از ممیز (بخش صحیح) یا بعد از ممیز (بخش کسری) مضربی از n نباشد با اضافه کردن صفر به سمت چپ بخش صحیح و سمت راست بخش کسری، تعداد ارقام هر بخش را به نزدیکترین مضرب n میرسانیم.
- از اولین رقم بعد از ممیز به سمت چپ در بخش صحیح و از اولین رقم بعد از ممیز به سمت راست در بخش کسری ارقام را n رقم، n رقم جدا و دستهبندی میکنیم.
- معادل هر دستهی n تایی در مبنای $۲^$ را به جای دسته قرار میدهیم.
برای تبدیل عدد $ \small \left. (11001/01)_ \right. $ به مبنای ۱۶، ابتدا تعداد ارقام هر دو بخش کسری و صحیح را با اضافه کردن صفرهای بیارزش به مضربهایی از چهار میرسانیم. پس از جدا کردن ارقام به دستههای چهارتایی، (توجه کنید که $ \small \left. 16 = 2^ \right. $) با ترتیبی که توضیح داده شد، معادل «Hexadecimal» هر دسته را به جای آن قرار میدهیم.
از این ویژگی برای نمایش اعداد باینری طولانی، مثل آدرسدهی به خانههای حافظه درکامپیوترها، برای خواناتر شدن و راحتی بیشتر استفاده میشود؛ چراکه حافظههای سیستمهای دیجیتال با استفاده از اعداد باینری شمارهگذاری میشوند و به علت زیاد بودن تعداد سلولهای حافظه در کامپیوترها، نمایش این آدرسها با اعداد باینری، میتواند بسیار سخت و گیجکننده باشد.
تبدیل از مبنای $۲^$ به مبنای $۲$
برای تبدیل اعداد از مبنای $۲^$ به مبنای $۲$ باید مراحل قسمت قبل را، به صورت برعکس انجام داد. بنابراین به جای هر رقم، معادل n رقمی آن را در مبنای $۲$ قرار میدهیم.
به عنوان مثال برای تبدیل یک عدد «octal» (عدد در مبنای $ \small \left. 2^ = 8 \right. $) مانند $ \small \left. (362/51)_ \right. $ به یک عدد باینری، به جای هر رقم آن، معادل دودویی ۳ رقمی آن را قرار میدهیم.
اعداد باینری در دنیای دیجیتال
یکی از دلایل استفادهی گسترده از ابزارهای دیجیتال در انواع کاربردها و زمینههای مختلف فیزیکی، آن است که این ابزارها، قدرت کارکرد به شکل عمومی و به صورت مستقل از شرایط محیطی را دارند. با طراحی یک مدار دیجیتال خاص، و استفاده از مبدلهای مناسب آنالوگ به دیجیتال میتوان آن مدار را در کاربردها و موقعیتهای گوناگونی به کار برد — قابلیتی که در ابزارهای آنالوگ وجود ندارد. همچنین سیستمهای دیجیتال نسبت به تغییرات ناخواستهی محیطی، مانند نویز و دما مقاومتر هستند.
ذخیره اعداد دودویی در سیستمهای دیجیتال
کوچکترین واحد ذخیره سازی اطلاعات در سیستمهای دیجیتال «بیت» یا «bit» میباشد. هر بیت، قابلیت ذخیرهی دو علم باینری حالت صفر یا یک را دارد. حافظهی کامپیوترها و پردازندههای دیجیتال از مجموعهی این بیتها ساخته شده است. واحد شناخته شده و کاربردی دیگر ذخیره حافظه «بایت» یا «byte» است. این واحد تشکیل شده از هشت بیت متوالی میباشد. اطلاعات، بسته به نوع آنها در تعداد مختلفی از بیتها ذخیره میشوند در اکثر مواقع، دادههای مورد استفاده در کامپیوترها، از یک تا چندین بایت حافظه را اشغال میکنند؛ اما در برخی از کاربردها، مثل طراحی میکروکنترلرها و میکروپروسسورها، که بهینهسازی استفاده از حافظه از اهمیت بالایی برخوردار است، گاهی تنها از یک بیت، یا قسمتی از یک بایت را برای ذخیرهی اطلاعات استفاده میکنند.
برای بیان و نمایش تعداد زیادی از بایتها با بیتها، از پسوندهایی مثل «Kilo» و «Mega» و «Giga» استفاده میشود. در جدول زیر مقدار معادل برخی از واحدهای حافظه بیان شده است.
واحد حافظه | مقدار معادل |
$ \small \left. 1 \right. $ nibble | $ \small \left. 4 \right. $ bits |
$ \small \left. 1 \right. $ Byte | $ \small \left. 8 \right. $ bits |
$ \small \left. 1 \right. $ Kilobyte | $ \small \left. 2^ \right. $ Bytes |
$ \small \left. 1 \right. $ Megabyte | $ \small \left. 2^ \right. $ Bytes |
$ \small \left. 1 \right. $ Gigabyte | $ \small \left. 2^ \right. $ Bytes |
$ \small \left. 1 \right. $ Terabyte | $ \small \left. 2^ \right. $ Bytes |
پردازش اعداد دودویی در سیستمهای دیجیتال
مدارهای دیجیتال، مدارهایی با ورودی و خروجیهایی گسسته هستند؛ در واقع علت کمتر بودن نویز در مدارهای دیجیتال نیز همین است. گسسته بودن ورودی و خروجی مدارهای دیجیتال، به این معناست که تنها با مقادیر مشخصی کار میکنند؛ درحالی که سیستمهای آنالوگ دارای مقادیر طبقهبندیشده و گسسته نیستند. در سیستمهای آنالوگ، برای تمامی مقادیر ورودی پیوسته، در خروجی پاسخی پیوسته داریم.
در سیستمهای دیجیتال، عموما سه سطح برای تعبیر سیگنالهای فیزیکی و آنالوگ وجود دارد. در شکل زیر، این سطحهای ولتاژ نمایش داده شده است.
- سطح «Valid logic high» شامل مقادیری است که سیستم آنها را به عنوان ۱ منطقی، «High» و یا «True» در نظر میگیرد.
- سطح «Valid logic low» شامل مقادیری است که سیستم آنها را به عنوان ۰ منطقی، «Low» و یا «False» در نظر میگیرد.
- سطح «Invalid high range» مقادیر میان این دو سطح است. این مقادیر، برای سیستم غیرقابلقبول هستند.
میزان گستردگی هر کدام از این سطوح بسته به مقدار تغذیهی مدار و نوع کاربرد آن، متفاوت است.
پس از آن که ورودی آنالوگ اعمال شده به سیستم، توسط مبدلهای آنالوگ به دیجیتال به رشتهای از اعداد باینری تبدیل شد، ورودی مدار توسط المانهای سیستم مورد پردازش قرار میگیرد. تمامی عملیات انجام شده در این پردازشگرها، در نهایت به سه عمل پایهای «AND» و «OR» و «NOT» ختم میشوند.
اعداد باینری علامتدار — به زبان ساده (+ دانلود فیلم آموزش رایگان)
پیش از شروع لازم به ذکر است که قسمتهای اول، دوم، سوم، چهارم و پنجم این مطلب را میتوانید از طریق کلیک کردن روی لینک مرتبط به هر بخش مطالعه کنید؛ در ریاضیات اعداد مثبت که شامل صفر نیز میشوند بهصورت اعداد بی علامت نمایش داده میشوند. یعنی برای اینکه نشان بدهیم این اعداد مثبت هستند، علامت + در برابر آنها قرار نمیدهیم.
فیلم آموزشی اعداد باینری علامتدار
با این حال وقتی با اعداد منفی سروکار داریم، یک علامت (-) در مقابل آنها قرار میدهیم تا نشان دهیم که این عدد مقدار منفی دارد و از عدد بی علامت مثبت متفاوت است. اعداد باینری علامتدار نیز همینطور هستند.
در مدارهای دیجیتال هیچ تدارکی برای قرار دادن یک علامت بعلاوه یا منها در کنار عدد دیده نشده است. چون سیستمهای دیجیتال با اعداد باینری کار میکنند که بهصورت صفر و یک نمایش داده میشوند. زمانی که این «1» و «0» ها در مدارهای میکروالکترونیک کنار هم قرار میگیرند، بیت (bit) نامیده میشوند (که از عبارت BInary digiT اخذ شده است). این اعداد در چند واحد قرار میگیرند که به نامهایی مانند بایت (8 بیت) یا کلمه (word = دو بایت) نامیده شدهاند.
یک عدد باینری هشت بیتی (یک بایت) میتواند مقداری بین 0 (000000002) تا 255 (111111112) داشته باشد یعنی 2 8 =256 ترکیب مختلف از بیتها، یک بایت ۸ بیتی منفرد را تشکیل میدهند. بنابراین یک عدد باینری بی علامت مانند 010011012 برابر با مقدار دهدهی 64 + 8 + 4 + 1 = 7710 خواهد بود. اما سیستمهای دیجیتال و رایانهها باید توانایی استفاده و تغییر اعداد منفی را نیز مانند اعداد مثبت داشته باشند.
نمادگذاری «علامت-بزرگی»
اعداد ریاضی به طور کلی از یک علامت و یک مقدار (بزرگی) تشکیل یافتهاند که علامت، نشان میدهد عدد مثبت یا منفی است و مقدار نیز بزرگی عدد را نشان میدهد. برای مثال 23، 156+ یا 274-. نمایش اعداد به این روش بهصورت نمایش «علامت-بزرگی» نامیده میشود، زیرا بیتی که در سمت چپ قرار دارد علامت عدد را نشان میدهد و باقی ارقام بزرگی این عدد را نشان میدهند.
نمادگذاری «علامت-بزرگی» سادهترین و یکی از رایجترین روشهای نمایش اعداد مثبت و منفی در دو طرف صفر است. بنابراین برای اعداد منفی، به سادگی با تغییر علامت، عدد مثبت متناظر به دست میآیند. بدین ترتیب هر عدد مثبت یک عدد متناظر با علامت منفی برای خود دارد برای مثال 2+ و 2+، 10+ و 10- و غیره.
اما وقتی تنها یک تعداد صفر و یک داریم، چگونه میتوانیم اعداد باینری علامتدار را نمایش بدهیم. میدانیم که ارقام باینری تنها دو حالت دارند یعنی 1 یا 0 هستند. از طرف دیگر یک علامت هم دو حالت دارد، یعنی «+» یا «-» است.
در این صورت میبینیم که در نمادگذاری «علامت-بزرگی» (SM)، مقادیر مثبت و منفی با تقسیم کردن n بیت به دو قسمت تقسیم میشوند: یک بیت برای علامت و n-1 بیت برای مقدار که یک عدد باینری خالص است. برای مثال عدد ۵۳ را میتوان بهصورت یک عدد باینری علامتدار ۸ بیتی همانند زیر نمایش داد.
اعداد باینری علامتدار مثبت
اعداد باینری علامتدار منفی
مشکل این نحوه نمایش این است که ما قبلاً یک محدوده کامل از اعداد باینری بدون علامت n بیتی داشتیم، اما اینک یک عدد باینری علامتدار n-1 بیتی داریم که محدوده ارقام آن کاهش یافته است.
بنابراین برای مثال اگر چهار بیت برای نمایش یک عدد باینری علامتدار داشته باشیم (یک بیت برای علامت و 3 بیت برای نشان دادن بزرگی عدد) در این محدوده، اعداد واقعی که میتوانیم در روش «علامت-بزرگی» نشان دهیم بهصورت زیر خواهد بود:
در حالی که قبلاً محدوده اعداد باینری ۴ بیتی بدون علامت از ۰ تا ۱۵ یا در نمایش مبنای ۱۶ (هگزادسیمال) از 0 تا F بودند، اما در این روش، نمایش به محدوده اعداد 7- تا 7+ کاهش یافته است. بنابراین عدد باینری بدون علامت، بیت منفرد علامت را ندارد و میتواند محدوده باینری بزرگتری داشته باشد، چون معنیدارترین بیت (MSB، یعنی بیت سمت چپ) تنها نشان دهنده یک رقم است و به عنوان بیت علامت استفاده نمیشود.
0 مثبت است یا منفی؟
عیب دیگر نحوه نمایش «علامت-بزرگی» اعداد باینری این است که میتوان هم یک نمایش مثبت برای عدد صفر داشت (0+) یا 00002 و هم یک صفر منفی، 0- یا 10002 که هر دو معتبر هستند ولی هیچ کدام صحیح نیستند.
در مثال زیر برای اعداد باینری علامتدار، مقادیر دهدهی را با استفاده از فرمت «علامت-بزرگی» به اعداد باینری علامتدار تبدیل می کنیم.
توجه داشته باشید که در همه اعداد باینری 4 بیت، 6 بیت، 8 بیت، 16 بیت یا 32 بیت، همه بیتها باید مقداری داشته باشند، از اینرو از 0 برای پر کردن فاصله بین بیت علامت که در سمت چپ قرار میگیرد و نخستین بیت با بالاترین مقدار 1 استفاده میشود.
نمایش «علامت-بزرگی» یک عدد باینری، روش سادهای برای استفاده و درک اعداد باینری علامتدار است، چون ما از این سیستم به طور روزمره برای اعداد معمولی دهدهی (بر مبنای 10) در محاسبات ریاضی استفاده میکنیم. کافی است وقتی عدد باینری منفی است، یک (1) و وقتی مثبت است یک (0) به ابتدای آن اضافه کنیم.
با این حال استفاده از این روش «علامت-بزرگی» ممکن است به این حالت منتهی شود که دو الگوی بیتی مختلف، مقدار باینری یکسانی داشته باشند. برای مثال 0+ و 0- به ترتیب بهصورت 0000 و 1000 به عنوان یک عدد باینری 4 بیتی نمایش مییابند. بنابراین میبینیم که در این روش برای عدد صفر ممکن است دو نمایش داشته باشیم، یعنی یک صفر مثبت (00002) و صفر منفی (10002) که موجب پیچیدگیهای زیادی در سیستمهای محاسباتی و دیجیتالی میشود.
«مکمل 1» یک عدد باینری علامتدار
مکمل یک (یا آن طور که غالباً استفاده میشود «مکمل 1») روش دیگری برای نمایش اعداد باینری منفی در یک سیستم اعداد باینری علامتدار است. در روش «مکمل 1» اعداد مثبت (به نام غیر مکمل نامیده میشوند) همانند روش قبلی بزرگی-علامت بدون تغییر باقی میمانند. اما اعداد منفی با انتخاب «مکمل 1» (معکوس سازی) عدد باینری مثبت ایجاد میشوند. از آنجا که اعداد مثبت همیشه با 0 آغازمی شوند، عدد مکمل همیشه با 1 آغاز میشود که نشاندهنده یک عدد منفی است.
«مکمل 1» یک عدد باینری منفی، معادل «مکمل 1» همتای مثبت آن است. بنابراین برای داشتن «مکمل 1» برای یک عدد باینری کافی است به ترتیب هر بیت را که 0 است به 1 و هر بیت را که 1 است به 0 تغییر دهیم. بدین ترتیب «مکمل 1» عدد 100101002 بهسادگی عدد 011010112 است چون همه ارقام 1 به 0 تبدیل شدهاند و برعکس.
آسانترین روش برای یافتن «مکمل 1» یک عدد باینری علامتدار، در زمان ساخت مدارهای محاسبات باینری یا دیکودر منطقی، استفاده از اینورترها است. اینورتر یک تولیدکننده مکمل طبیعی است و میتواند بهموازات اجزای دیگر برای محاسبه «مکمل 1» هر عدد باینری بهصورت زیر مورد استفاده قرار گیرد.
«مکمل 1» با استفاده از اینورتر
در این صورت میبینیم که یافتن «مکمل 1» یک عدد باینری N آسان است، چون کافی است صرفاً بیتهای 1 را 0 کنیم و بیتهای 0 را به 1 تبدیل کنیم تا به عدد معادل N- برسیم. همچنین همانند روش نمایش قبلی «بزرگی-علامت» روش «مکمل 1» نیز میتواند یک نمادگذاری بیتی برای نمایش اعداد بهصورت (n-1) 2- و 1- (n-1) 2+ داشته باشد. برای مثال یک نمایش 4 بیتی در قالب «مکمل 1» را میتوان برای نمایش اعداد در محدودهای از 7- تا 7+ داشت که علم باینری همانند روش قبل دو نمایش برای صفر، به صورت 0000 (0+) و 1111 (0-) خواهیم داشت.
جمع و تفریق با استفاده از «مکمل 1»
یکی از مزایای روش «مکمل 1»، در زمان جمع و تفریق دو عدد باینری قابل مشاهده است. در ریاضیات، تفریق میتواند به روشهای مختلفی انجام گیرد. مثلاً A-B همان A+(-B) یا B+A- است. از اینرو پیچیدگی تفریق دو عدد را با تبدیل کردن آن به جمع دو عدد میتوان از میان برداشت.
میدانیم که هنگام جمع باینری از همان قواعد جمع معمولی استفاده میکنیم، بهجز اینکه در حالت باینری تنها دو بیت (رقم) وجود دارند و بزرگترین رقم، «1» است (مانند «9» که بزرگترین رقم در سیستم دهدهی است) و از اینرو ترکیب احتمالی جمع باینری بهصورت زیر است:
وقتی هر دو عددی که میخواهیم جمع کنیم مثبت باشند (مجموع A+B) میتوان آنها را با استفاده از جمع مستقیم (شامل عدد و بیت علامت) به هم اضافه کرد. چون وقتی بیتهای منفرد به هم اضافه میشوند «0+0»، «0+1» یا «1+0» نتیجه جمع یا «0» است و یا «1». این امر به این دلیل است که وقتی دو بیت متفاوت به هم اضافه شوند (0+1 یا 1+0) نتیجه 1 خواهد بود. به طور مشابه وقتی دو بیت که به هم اضافه میشوند، مشابه باشند (0+0 یا 1+1) نتیجه 0 خواهد بود. تا اینکه به جمع 1+1 برسیم که نتیجه یک 0 و یک 1 اضافی خواهد بود. در ادامه در این مورد بیشتر توضیح دادهایم.
تفریق دو عدد باینری
در یک سیستم دیجیتال 8 بیتی میخواهیم دو عدد 115 و 27 را با استفاده از روش «مکمل 1» از هم کم کنیم. در سیستم دهدهی این تفریق بهصورت زیر است: 88 = 27-115.
ابتدا باید اعداد دهدهی را به سیستم باینری تبدیل کنیم و با افزودن 0 به اول اعداد مطمئن شویم که هر عدد بیتهای یکسانی دارد و آنها را به اعداد 8 بیتی (بایت) تبدیل کنیم. بنابراین:
اینک میتوانیم مکمل عدد باینری دوم (00011011) را بیابیم، در حالی که عدد اول (01110011) را بدون تغییر حفظ میکنیم. بنابراین با تغییر دادن همه 1 ها به 0 و همه 0 ها به 1، «مکمل 1» عدد باینری 00011011 برابر با 11100100 خواهد بود.
افزودن عدد اول به مکمل عدد دوم بهصورت زیر خواهد بود:
بیت overflow
از آنجایی که سیستم دیجیتال باید با 8 بیت کار کند، تنها 8 رقم نخست برای ارائه پاسخ مجموع کافی خواهد بود و بیت آخر (بیت 9) را نادیده میگیریم. این بیت به نام بیت اورفلو (overflow) نامیده میشود. اورفلو زمانی رخ میدهد که مجموع ستون سمت چپ یک رقم اضافی تولید کند. این بیت اضافی اورفلو را میتوان به طور کامل نادیده گرفت یا برای محاسبات به قطعه دیجیتال بعدی ارسال کرد. اورفلو نشان میدهد که پاسخ مثبت است. اگر اورفلو وجود نداشته باشد در این صورت عدد منفی است.
نتیجه 8 بیت حاصل از محاسبات فوق عدد 01010111 است (اورفلو 1 حذف شد) و برای اینکه آن را از حالت «مکمل 1» به یک عدد واقعی تبدیل کنیم باید عدد 1 را به نتیجه «مکمل 1» اضافه کنیم. بنابراین:
بنابراین تفریق 27 (000110112) از 115 (011100112) با استفاده از روش «مکمل 1» در سیستم باینری نتیجهای برابر با 010110002 یا (64 + 16 + 8) = 8810 در سیستم دهدهی خواهد داد.
در این صورت میبینیم که اعداد باینری علامتدار یا بی علامت را میتوان با استفاده از روش «مکمل 1» و فرایند جمع زدن، از هم کسر کرد. میتوان از آدرس باینری مانند TTL 74LS83 یا 74LS283 برای افزودن یا کم کردن دو عدد علامتدار 4 بیتی یا الحاق به هم برای تولید آدرس 8 بیتی کامل استفاده کرد.
«مکمل دو» یک عدد باینری علامتدار
مکمل دو (یا آن طور که معمولاً نوشته میشود: «مکمل 2») روش دیگری مشابه روش «بزرگی-علامت» و روش «مکمل 1» است که میتوان برای نمایش اعداد باینری منفی در سیستم اعداد باینری علامتدار مورد استفاده قرار داد. در روش «مکمل 2» اعداد مثبت دقیقاً همانند روش قبل، مثل اعداد باینری بی علامت هستند. اما اعداد منفی بهصورت یک عدد باینری نمایش مییابند که وقتی به معادل مثبت خود اضافه شوند، نتیجه 0 خواهد بود.
در روش «مکمل 2»، یک عدد منفی، «مکمل 2» عدد مثبت متناظر خود است و کسر کردن دو عدد از هم بهصورت («مکمل 2» B)+ A–B = A با فرایندی مشابه روش قبل خواهد بود. «مکمل 2» همان «مکمل 1» + 1 است.
مزیت اصلی روش «مکمل 2» نسبت به «مکمل 1» این است که مشکل وجود 0 مضاعف وجود ندارد و تولید یک «مکمل 2» از عدد باینری بسیار آسانتر است. بنابراین اجرای عملیاتهای محاسباتی زمانی که اعداد به روش «مکمل 2» نمایش مییابند، راحتتر است.
مزیت روش «مکمل 2»
به تفریق دو عدد 8 بیتی 115 و 27 مثال فوق با استفاده از روش «مکمل 2» توجه کنید. از مثال فوق به خاطر داریم که معادلهای باینری بهصورت زیر هستند:
این اعداد 8 بیتی هستند و بنابراین 2 8 رقم برای نمایش مقادیر وجود دارند که در باینری معادل عدد 1000000002 یا 25610 است. در این صورت «مکمل 2» عدد 2710 بهصورت زیر است:
(2 8 )2-00011011 = 100000000 – 00011011 = 111001012
ساختن مکمل عدد دوم آن را منفی میکند و علم باینری بنابراین تفریق آن از عدد اول بسیار سادهتر میشود و کافی است آنها را با هم جمع کنیم یعنی 115 + («مکمل 2» عدد دوم) بهصورت زیر:
01110011 + 11100101 = 1 010110002
همانند مثال قبل بیت 9 اضافی حذف میشود چون ما فقط به 8 بیت اول نیاز داریم بنابراین همانند مثال قبل به عدد زیر میرسیم: 010110002 یا (64 + 16 + 8) = 8810
خلاصه اعداد باینری علامتدار
دیدیم که اعداد باینری منفی را میتوان با استفاده از بیت منتهیالیه سمت چپ به عنوان بیت علامت نمایش داد. اگر یک عدد باینری n بیتی علامتدار باشد، در این صورت با اختصاص اولین بیت به علامت عدد، n-1 بیت برای نمایش عدد باقی میماند.
برای مثال در یک عدد باینری 4 بیتی تنها 3 بیت برای نمایش عدد وجود دارد. با این حال اگر عدد باینری بی علامت باشد، میتوان از همه بیتها برای نمایش عدد استفاده کرد.
نمایش عدد باینری علامتدار به طور معمول بهصورت نمادگذاری «علامت-بزرگی» نامیده میشود و اگر بیت علامت 0 باشد عدد مثبت است. در صورتی که بیت علامت برابر با 1 باشد، عدد منفی است. زمانی که عملیاتهای محاسباتی بر روی اعداد باینری علامتدار انجام میدهیم، بسیار راحتتر است که از مکمل اعداد برای اعداد منفی استفاده کنیم. ایجاد مکمل یک روش جایگزین برای نمایش اعداد باینری منفی است. این سیستم کدینگ جایگزین، امکان تفریق اعداد با استفاده از عملیات جمع ساده را فراهم میکند.
از آنجا که اعداد مثبت در سیستم «علامت-بزرگی» همواره با 0 شروع میشوند مکمل آنها نیز همواره با 1 آغاز میشود که نشان دهنده عدد منفی است. در جدول زیر این مطالب به طور خلاصه مورد اشاره قرار گرفته است.
مقایسه عدد باینری علامتدار 4 بیتی
روشهای مکمل علامتی برای اعداد باینری بهصورت «مکمل 1» یا «مکمل 2» هستند. «مکمل 1» و «مکمل 2» برای یک عدد باینری، مهم هستند، زیرا امکان نمایش اعداد منفی را ایجاد میکنند. روش «مکمل 2» در محاسبات رایانهای به طور معمول برای مدیریت اعداد منفی مورد استفاده قرار میگیرد و تنها عیبی که دارد این است که اگر بخواهیم اعداد باینری منفی را در سیستم اعداد باینری علامتدار نمایش بدهیم، باید بخشی از محدوده اعداد مثبتی که قبلاً داشتیم را از دست بدهیم.
اگر مطالب بالا برای شما مفید بوده است، شاید از این آموزشها نیز استفاده ببرید.
باینری چیست و چگونه توسط کامپیوتر استفاده میشود؟
همانطور که میدانید کامپیوترها همانند انسانها اعداد و کلمات را درک نمیکنند و علیرغم ظاهر نرمافزارهای امروزی، کامپیوتر همهچیز را به صورت سیگنال الکتریکی باینری(در مبنای ۲) دریافت میکند.
در اعداد باینری تنها دو رقم ۰ و ۱ وجود دارد که در علم کامپیوتر نمایانگر روشن یا خاموش بودن سیگنالهاست. ما به صورت روزمره از مبنای ده استفاده میکنیم که در آن ارقام از ۰ تا ۹ بوده و ارزش هر رقم ده برابر رقم سمت راست خود است. در باینری نیز اساس همین است و ارقام ۰ و ۱ پشت سر هم چیده شدهاند و هر رقم دو برابر رقم سمت راست خود ارزش دارد.
محاسبهی باینری
راستترین رقم ارزش ۲ ۰ دارد، رقم سمت چپ آن ارزش ۲ ۱ برابر، چپی ۲ ۲ برابر و به همین شکل تا چپترین رقم. بنابراین ۱۱۱۱ در باینری معادل ۱*۸+۱*۴+۱*۲+۱*۱ یعنی ۱۵ است. شاید در نظر ما باینری بیهدف و کمکاربرد باشد، اما برای کامپیوتر اینگونه نیست و این مبنای اعداد بهترین روش برای ارائهی اطلاعات به سختافزار است.
روش دیگر مورد استفاده در برنامهنویسی، مبنای ۱۶ است. البته کامپیوتر مستقیما آن را درک نمیکند، اما برنامهنویسان میتوانند از آن برای ارائهی سادهتری از باینری استفاده کنند. در مبنای ۱۶ از ارقام ۰ تا ۹ و همچنین حروف A تا F(برای ۱۰ تا ۱۵) استفاده میشود.
چرا کامپیوترها از باینری استفاده میکنند؟
پاسخ کوتاه دو کلمه است: سختافزار، فیزیک! هر عدد در کامپیوتر شما یک سیگنال الکتریکی است که صرفنظر از اندازه و قدرت خود همیشه از باینری استفاده کردهاند. کامپیوترهای مدرن از ترانزیستورها جهت محاسبات باینری استفاده میکنند.
به صورت کلی، ترانزیستور در صورت وجود جریان در Gate، اجازهی عبور آن از منبع به مصرفکننده را میدهد. امروزه اندازهی ترانزیستورها بسیار کوچک(در حد ۵ نانومتر، یعنی معادل با دو رشتهی DNA!) است و در CPU های مدرن استفاده میشوند.
چرا فقط مبنای ۲؟
پاسخ این سوال نیز چند بعد دارد. یک بعد مسئلهی عادت و سنت است؛ بعد دیگر معنای هر رقم است. یعنی با داشتن بیش از ۲ رقم باید معنایی نظیر کم و زیاد را نیز به روشن و خاموش اضافه کنیم که انجام محاسبات برای این گونه مبناها کار پیچیده و زمانبری است و سختافزارهای مورد استفادهی ما از پس آن بر نمیآیند. البته این به آن معنی نیست که توانایی ساخت اینگونه سختافزارها وجود ندارد؛ در اصل جالب است بدانید که چنین ابزاری(برای مبنای ۳) در دههی ۵۰ میلادی ساختهشد و علیرغم توانایی بالا بر روی کاغذ، در عمل نتوانست قدرت قابل توجهی از خود نشان دهد.
علت ضعف این دستگاه در روش عملکرد ترانزیستورها است. چرا که آنها در Gateها قرار گرفته و از دو ورودی، یک خروجی تهیه میکنند.
بنابراین بدیهی است که مبنای دو برای این کار ایدهآل است و انواع عملیات ریاضی و منطقی بر روی آنها انجام میشود. عملیاتی که شامل And، Or، Xor و موارد زیاد دیگر میشود.
اگر دستگاه بر مبنای ۲ کار کند، برای دو ورودی ۴ خروجی متفاوت قابل تصور است، ولی در حالت مبنای ۳ تعداد خروجیهای ممکن به ۹ میرسد. ضمنا یک سیستم باینری ۱۴ عملگر دارد، درحالی که در مبنای ۳ به ۱۹۶۸۳ عملگر نیاز است! بنابراین علیرغم قدرت بهظاهر بالاتر مبنای ۳، کار با آن بسیار سختتر و زمانگیر است.
البته کسی از آینده خبر ندارد و ممکن است روزی مبنای ۳ فراگیر شود، چرا که امروزه ما به سرعت در حال استفاده از تمامی تواناییهای باینری هستیم و بعید نیست روزی دیگر پاسخگوی نیازهای ما نباشد. اما به هر حال در این لحظه، همچنان باینری زبان مورد استفادهی جهانیان است.
جلسه ۰۳ : مفهوم سیستم باینری – علم کامپیوتر
سلام و درود خدمت همراهان وب سایت آموزشی پی وی لرن. در چند جلسه قصد داریم با علم کامپیوتر بیش تر آشنا شویم. مفهوم سیستم باینری یا Binary رو در این بخش قصد داریم توضیح دهیم. با ما همراه باشید.
مفهوم سیستم باینری یا Binary
در طول تاریخ ، تقریباً در هر تمدنی از یک سیستم دسیمال با ۱۰ رقم استفاده شده است: صفر تا نه.
همه اعدادی را که می خواهیم از ترکیب این ۱۰ رقم می توانیم ایجاد نماییم.
با این حال رایانه ها متفاوت عمل می کنند.
آن ها از یک سیستم عددی استفاده می کنند که فقط دو رقم دارد: یک و صفر.
این سیستم باینری نامیده می شود و کامپیوترشما همیشه از آن استفاده می کند.
رایانه ها برای انجام کاری که انجام می دهند به اطلاعات نیاز دارند.
این اطلاعات دیجیتال یا داده ها از چیزی به نام بیت تشکیل شده است.
بیت برای یک رقم دودویی است ،به این معنی که هر بیت واقعاً فقط یک عدد است: یک یا صفر.
مفهوم سیستم باینری یا Binary
بیت ها می توانند برای ایجاد واحدهای بزرگ تر مانند بایت ، مگابایت و مواردی از این دست استفاده شوند که برای اندازه گیری فایل های خود از آن ها استفاده می کنیم. هرچه فایل بزرگ تر باشد ، بیت بیش تری نیز دارد. بنابراین چیزی شبیه به یک فیلم با وضوح بالاست که در واقع از میلیون ها و میلیون ها صفر و یک ساخته شده است.
اما دقیقاً چطور و چگونه صفر و یک ها جمع می شوند و به کامپیوتر اجازه می دهند عملکردی داشته باشد؟ بیایید سیستم باینری را مانند یک سوئیچ نور در نظر بگیریم. تصور کنید که یک، نشانگر روشن بودن سوئیچ باشد و صفر نشان دهنده خاموش بودن آن باشد. با وجود سیستم باینری ، نور یا روشن و یا خاموش است و هیچ حالت ممکن دیگری وجود ندارد.
مفهوم سیستم باینری یا Binary
این بیت ها به صورت ترکیب های مختلفی از یک و صفرها کنار هم قرار می گیرند و نوعی کد را تشکیل می دهند. سپس کامپیوتر شما به سرعت این کد را پردازش کرده و آن
را به داده ها ترجمه می کند و به آن می گوید چه کاری انجام دهد.
مفهوم سیستم باینری یا Binary
شاید تعجب کنید که چرا کامپیوترها بجای سیستم دهدهی یا دسیمال که برای شمارش در زندگی روزمره ی خود استفاده می کنیم از باینری استفاده می کنند. همان طور که گفته شد ، باینری دو حالت دارد: خاموش و روشن. اگر رایانه ها از سیستم دسیمال استفاده می کردند ، در عوض ۱۰ حالت وجود داشت و برای پردازش همه آن ها باید کار سخت تر انجام علم باینری می شد.
پردازش دودویی برای رایانه ها آسان تر است و همچنین فضای کم تری را نیز اشغال می کند.
مفهوم سیستم باینری یا Binary
درست مانند اتم ها در دنیای واقعی همه چیز را در اطراف ما تشکیل می دهند ، همه چیز در دنیای دیجیتال می تواند به صورت دودویی باشد.
کلام پایانی
در این بخش از آموزش علوم کامپیوتر با مفهوم سیستم باینری یا Binary آشنا شدیم.
اعداد باینری به زبان ساده
همهی ما تا به حال شنیدهایم که کامپیوترها با صفر و یک کار میکنند. اما شاید برامون سوال شده باشه که اونا چه جوری با صفر و یک کار میکنند و این حجم عظیمی از اطلاعات رو با این دو تا عدد پردازش می کنند؟ در این مقاله قصد دارم تا به پایه ترین مفهوم در علم کامپیوتر یعنی اعداد باینری بپردازم.
بیاین اینطور شروع کنیم که ما آدما قبل از پیدایش کامپیوترها برای این که بتونیم با هم دیگه ارتباط برقرار کنیم اومده بودیم برای خودمون یک سری قواعد و زبان هایی رو تعریف کرده بودیم. هر قوم و تمدنی برای خودشون. از تمدنهای گذشته که با زبانهای خاصی مثل میخی سر و کار داشتند تا به امروز که زبان های بین المللی مثل انگلیسی که در جهان رایجه. و خب میدونید که هدف اصلی اونا ایجاد ارتباط هستش.
الفبایی به وسعت دو حرف!
ما آدما همونطور که مشغول زندگی خودمون بودیم، یهو سر و کلهی کامپیوترها پیدا شد و ما تصمیم گرفتیم برای اینکه بتونیم با اونا ارتباط برقرار کنیم یه الفبا و زبانی رو براش تعریف کنیم و خلاصه نتیجه این شد که بعد از مدتها بحث به این نتیجه رسیدند که الفبایی رو براش ابداع کنند. الفبایی به وسعت دو حرف!
جالبه نه؟! تصور کنید بعضی تمدنها مثل چینیها حدود سه هزارتا حرف فقط تو الفباشون دارند اون وقت یه تمدن مدرنی مثل کامپیوتر فقط با دو تا چیز سر و کار داره و اون صفر و یکه! از کارهای سادهای مثل نوشتن یه متن گرفته تا کارای خفنی مثل بازیهای گرافیک بالا رو کامپیوترها انجام میدن. اما خب یه دونه صفر و یک خالی که به درد ما نمیخوره خیلی کاربرد داشته باشه اینه که بگیم کامپیوتر ما خاموش هستش یا روشن. پس اومدن چیکار کردن؟
توی زبانهای طبیعی مثل فارسی هم حروف الفبا به تنهایی کاربردی ندارند و ما مجبوریم که اونا رو ترکیب کنیم تا کلمات به وجود بیان و حالا یه چیز معناداری بدست بیاد. بنیان گذاران علم کامپیوتر هم گفتند که ما هم بیایم این صفر و یکها رو کنار هم قرار بدیم شاید یه چیز معناداری از آب در بیاد!
بیاین با یک مثال شروع کنیم. یه عددی رو در نظر بگیرین که فقط شامل صفر و یک باشه مثل : 1010
ما این عدد رو می خونیم صد و یک.
اما کامپیوترها این عدد رو 10 در نظر می گیرند. چه جوری؟
اینجا میخوایم یه خورده وارد تئوری نظریه اعداد بشیم. اما نگران نباشید، سعی می کنم به زبان ساده این موارد رو توضیح بدم.
همون طور که میدونید مبنای اعداد ما ده هستش. از عدد 0 تا 9. احتمالا به این علت که ما چون ده تا انگشت داریم و معمولا محاسبتمون رو اصطلاحا سرانگشتی انجام میدیم کار کردن با اون راحت تره! همهی ما سالیان سال با این مبنا کار کردیم اما شاید از تئوری و پشت پرده اون خبر نداشته باشیم. بیاین کمی بیشتر این موضوع رو توضیح بدیم.
اجازه بدین چند تا مثال از اعداد در مبنای ده با هم دیگه کار کنیم.
همونطور که دیدین این عدد از حاصل جمع ضرب ارقام به ترتیب در یکان و دهگان و صدگان و … به دست میاد.
دیدین تا اینجا چیز خاصی یاد نگرفتیم و همهمون بلد بودیم. حالا بیاین یه تغییر کوچک اعمال کنیم و یه مبنای جدیدی درست کنیم، مبنایی که کامپیوترها باهاش راحت ترند؛ مبنای دو.
که به این اعداد در مبنای دو اصطلاحا اعداد باینری یا دودویی هم میگن.
تفاوت این مبنای با مبنای ده اینه که به جای اینکه توانها از راست به چپ ده برابر بشن، اینجا دو برابر میشن.
و تفاوت دیگه اینکه از ارقام 0 تا 9 فقط اعداد صفر و یک مجازه.
حالا برای اینکه بهتر متوجه بشین بیاین چند مثال رو با هم ببینیم:
همون طور که تو مثالهای بالا دیدین این اعداد شبیه همون اعدادی هستن که ما قبلا باهاشون کار میکردیم، ولی ارقام مجازشون صفر و یک هستش و ارزش ارقامش از راست به چپ به جای ده برابر شدن دو برابر میشن.
تا اینجا ما یه آشنایی با مبنای دو و مفهوم باینری پیدا کردیم و تونستیم یاد بگیریم که مبنای دو رو به ده تبدیل کنیم. البته تو این مقاله نحوهی تبدیل مبنای ده به دو رو نگفتهام و شاید خیلی از مباحث دیگه هم هستش که در اینجا بهش نپرداختیم. اما نگران نباشید در آینده به تدریج مقالات بیشتری رو منتشر میکنم.
بنظرم تا اینجای کار کافیه.
جمع بندی
بیاین یه مروری داشتیم باشیم.
ما توی این مقاله با صفر و یکها و اعداد باینری آشنا شدیم و دونستیم که چرا کامپیوترها از اون استفاده میکنند. اما این تازه اول راهه! ما تا اینجا تنها چیز جدیدی که یاد گرفتیم مبنای دو یا باینری بودش مثلا هنوز نمی دونیم که کامپیوترها چه جوری عملیات محاسباتی ساده ای مثل جمع و تفریق رو روی اینا انجام میدن. یا مثلا آیا کامپیوترها فقط با اعداد سر و کار دارند مگه با اونا روزانه در حال نوشتن متن به زبان های مختلف نیستیم و خیلی چیزای دیگه.
در پایان از اینکه مقاله من رو مطالعه کردین سپاسگزارم. راستی خوشحال میشم که نظرات خودتون رو هم درباره این متن بنویسید.