Overflow؛ وقتی جواب جا نمیشود! آموزش و یادگیری Overflow؛ وقتی جواب جا نمیشود! به صورت رایگان
درک Overflow و تفاوت آن با Carry
سلام!
ما تو تِرِد قبل دیدیم که کامپیوتر جمع و تفریق رو با بیت ها انجام میده.
اما یه محدودیت مهم داره:
کامپیوتر همیشه تعداد مشخصی بیت برای نگه داشتن عدد داره.
مثلاً اگه بگیم با ۴ بیت کار میکنیم، فقط چهار خانه برای نوشتن جواب داریم.
نه بیشتر.
اگر عدد ها رو بدون علامت در نظر بگیریم، با ۴ بیت میتوانیم از صفر تا ۱۵ را بنویسیم:
تا:
مثال
مثال: ۷ + ۱۲
حالا فرض کن بخوایم ۱۲ و ۷ رو جمع کنیم:
اما ۱۹ درون ۴ بیت جا نمیشه.
جمع باینری رو انجام میدیم:
+ 0111
──────
10011
جواب واقعی 10011₂ هست؛ یعنی ۱۹.
ولی ما فقط ۴ بیت جا داریم.
پس بیت اضافه سمت چپ بیرون میزنه و اگر فقط همون چهار بیت رو نگه داریم، میمونه:
که یعنی ۳.
کامپیوتر جواب رو اشتباه حساب نکرده؛ جواب درست رو تولید کرده، اما فضای کافی برای نگه داشتنش نداشته.
به این اتفاق میگیم Overflow؛ یعنی جواب از مقدار قابل نمایش بیرون زده است.
آیا Overflow همون Carry است؟
حالا ممکنه بگی: «خب، همون Carry که در جمع دیدیم نیست؟»
نه همیشه.
در عدد های بدون علامت، Carry بیرونزده از سمت چپ معمولاً به ما میگه که جواب در تعداد بیت های موجود جا نشده است.
پس در جمع بدون علامت، Carry میتونه نشانه Overflow باشد.
اما در عددهای علامتدار که با مکمل دو نشون داده میشه، داستان کمی فرق دارد.
Overflow در عددهای علامتدار
مثلاً باز هم با ۴ بیت کار میکنیم.
در مکمل دو، بازه عدد های قابل نمایش اینه:
حالا 5 و 5 رو جمع میکنیم:
پس:
+ 0101
──────
1010
از نظر واقعی، جواب باید ۱۰ باشد.
اما در مکمل دوِ ۴ بیتی، عدد 1010 برابر است با ۶-، نه ۱۰+ چون در بازه ای که مشخص کردیم(همون بازه 8- تا 7) ۱۰+ وجود نداره اصلا.
یعنی دو عدد مثبت رو جمع کردیم، ولی نتیجه از نگاه سیستم منفی شده است.
این دقیقاً نشانهی Overflow در عددهای علامتدار است.
قاعدهی تشخیص Overflow
قاعدهاش رو اینطور یاد بگیر:
- اگر دو عدد مثبت رو جمع کنیم و جواب منفی شود ← Overflow رخ داده.
- اگر دو عدد منفی رو جمع کنیم و جواب مثبت شود ← Overflow رخ داده.
- اگر یک عدد مثبت و یک عدد منفی رو جمع کنیم ← هرگز Overflow رخ نمیده؛ چون جواب همیشه بین آن دو قرار میگیرد و از بازه بیرون نمیزنه.
تفاوت Carry و Overflow
پس Carry و Overflow یکی نیستن.
| مفهوم | توضیح |
|---|---|
| Carry | بیت نقلی ای(درستش نَقلی هست ولی شما نُقلی بخون تو ذهنت بمونه اگر دوست داشتی مثل خودت که نُقل مجلس ما هستی) که از سمت چپ جمع بیرون میزند |
| Overflow | جواب نهایی در بازه قابل نمایش جا نمیشه |
گاهی هر دو با هم رخ میدهند، گاهی فقط یکی از آن ها رخ میده، و گاهی هیچکدام.
پس Overflow یعنی جواب وجود دارد، ولی ظرفِ بیت های ما برای نگه داشتنش کوچکه.
در تِرِد بعدی میریم سراغ BCD؛ روشی که کامپیوتر با آن رقم های ده دهی رو به شکل باینری نگه میداره.
با این داداشت همراه باش!!!