Two's Complement؛ ترفند مهم کامپیوتر آموزش و یادگیری Two's Complement؛ ترفند مهم کامپیوتر به صورت رایگان
فهم مکمل دو و دلیل محبوبیت آن
سلام!
در تِرِد قبلی دو روش برای نمایش عدد های منفی دیدیم: Sign and Magnitude و One’s Complement.
هر دو یه مشکل مشترک داشتند: صفر را میشد به دو شکل نوشت.
اینجاست که Two’s Complement وارد میشود
ایده اش تقریباً همون One’s Complement است، با یه حرکت اضافه آمااااا.
برای ساختن نسخه منفی یه عدد در مکمل دو، اول همه بیت ها رو بر عکس میکنیم؛ بعد به جواب، یک واحد اضافه میکنیم.
مثال
مثال: عدد ۵- در قالب ۸ بیتی
میخواهیم -5 را در قالب ۸ بیتی بنویسیم.
مرحله ۱: اول +5 رو مینویسیم:
مرحله ۲: همه بیت ها رو بر عکس میکنیم (One’s Complement):
مرحله ۳: یک واحد به آن اضافه میکنیم:
پس نمایش -5 در مکمل دو ۸ بیتی میشود:
این «اضافه کردن یک» الان چیکار کرد خب؟
جواب را با خودِ صفر میبینیم.
اگر صفر را در قالب ۸ بیتی بنویسیم، داریم:
حالا بیتها را برعکس میکنیم:
و یک واحد هم اضافه میکنیم:
اما ما فقط ۸ بیت جا داریم.
آن ۱ اضافهای که سمت چپ بیرون زده را نگه نمیداریم.
پس نتیجه دوباره میشود:
یعنی در مکمل دو، مثبت صفر و منفی صفر هر دو به یک الگوی بیتی میرسند.
این دقیقاً همان چیزی بود که میخواستیم. اون یکی که دور انداختیم بهش میگن carry!! تو ترد بعد باهاش آشنا میشی;)نکته
دلیل اصلی محبوبیت مکمل دو
اما دلیل اصلی محبوبیت مکمل دو فقط حذف «منفی یا مثبت صفر» نیست.
مکمل دو کاری میکند که جمعِ عدد های مثبت و منفی، با همان مدار جمع کننده معمولی انجام شود.
مثلاً اگر بخواهیم 5 + (-5) را حساب کنیم، کافی است این دو الگوی بیتی را جمع کنیم:
+11111011
= 1 00000000
باز هم فقط ۸ بیت را نگه میداریم؛ پس نتیجه:
یعنی صفر.
مزیت بزرگ مکمل دو
- مدار لازم نیست اول تشخیص بدهد عدد ها هم علامت اند یا مختلف العلامت.
- لازم نیست بین «جمع» و «تفریق» محاسبه خاصی صورت بگیرد.
- فقط بیت ها را جمع میکند.
همین باعث میشود طراحی سخت افزار ساده تر شود؛ و به همین دلیل، مکمل دو روش رایج نمایش عددهای صحیح علامتدار در کامپیوترهاست.
نکته مهم
بازه اعداد
وقتی با ۸ بیت در مکمل دو کار میکنیم، یک بیت از نظر ظاهری سمت چپ قرار دارد و نشانه منفی بودن عدد است.
پس بازه عدد هایی که میتوانیم نمایش دهیم این است:
چرا +128 نداریم؟
چون یک الگوی بیتی برای صفر لازم داریم و در سمت منفی یک الگوی اضافه باقی میماند.
آن الگو این است:
فعلاً لازم نیست همه جزئیات رو یاد بگیری.
جمعبندی
فقط این تصویر رو داشته باش:
- برای منفی کردن یک عدد در مکمل دو، بیت هاش رو بر عکس میکنیم و یک واحد به آن اضافه میکنیم.
- در مکمل دو، جمع و تفریق با یک منطق سادهتر کنار هم قرار میگیرند.
تِرِد بعدی میریم سراغ اینکه:
کامپیوتر دقیقاً چطور جمع و تفریق باینری انجام میدهد و Carry چه نقشی دارد؟
با این داداشت همراه باش!!!