آزمایشگاه آزاد؛ بدون نیاز به ورود
سرریز عدد صحیح و دور زدن بیتها
یک شمارنده با فضای محدود بعد از رسیدن به آخرین عدد چی کار میکنه؟ با نزدیک کردن ورودی به ظرفیت بیتها، لحظهٔ سرریز رو ببین.
آزمایش رو شروع کنشبیهساز با ۸ بیت و ورودی ۲۵۶ شروع میشه؛ عدد ذخیرهشده صفره و یک دور کامل ثبت شده. ورودی رو به ۲۵۵ برگردون و مقایسه کن.
آزمایشگاه در حال آماده شدنه…
حالا خودت امتحان کن
هر بار فقط یک چیز رو تغییر بده تا اثرش رو ببینی. قبل از اجرا، نتیجه رو حدس بزن.
یک قدم تا سرریز
تعداد بیتها رو روی ۸ نگه دار؛ اول ورودی رو روی ۲۵۵ بذار و بعد به ۲۵۶ برسون. عدد دودویی و مقدار پس از دور زدن رو ببین.
حدست چیه؟ با زیاد شدن ورودی از ۲۵۵ به ۲۵۶، عدد ذخیرهشده چه تغییری میکنه؟
توضیح نتیجه رو ببین
با ۸ بیت بیشترین مقدار ۲۵۵ه. برای ورودی ۲۵۵، عدد ذخیرهشده هم ۲۵۵ و تعداد دور صفره؛ در ۲۵۶، مقدار ذخیرهشده به صفر و تعداد دور به یک میرسه.
بیشتر از یک دور
بیتها رو روی ۴ بذار و ورودی رو اول ۳۱ و بعد ۳۲ کن. حداکثر مقدار، عدد دودویی و تعداد دور رو مقایسه کن.
حدست چیه؟ وقتی ورودی از ۳۱ به ۳۲ میرسه، چند بار از بازهٔ ۴ بیتی عبور کرده؟
توضیح نتیجه رو ببین
با ۴ بیت فقط عددهای ۰ تا ۱۵ جا میشن. ورودی ۳۱ یک دور کامل و مقدار ذخیرهشدهٔ ۱۵ داره؛ ورودی ۳۲ دو دور کامل میزنه و مقدار ذخیرهشده صفر میشه.
همون عدد با بیتهای بیشتر
ورودی رو روی ۲۵۶ نگه دار؛ تعداد بیتها رو از ۸ به ۹ تغییر بده و حداکثر مقدار و مقدار ذخیرهشده رو ببین.
حدست چیه؟ آیا ۲۵۶ با ۹ بیت هم دور میزنه؟
توضیح نتیجه رو ببین
با ۸ بیت، ۲۵۶ از بیشینهٔ ۲۵۵ رد میشه و به صفر برمیگرده؛ با ۹ بیت، بیشینه ۵۱۱ه و ۲۵۶ بدون دور زدن ذخیره میشه.
پشت این حرکت چه خبره؟
هر بیت ظرفیت رو دو برابر میکنه
max = 2^n - 1
مدل فقط عددهای صحیح نامنفی رو نگه میداره. با n بیت، ۲ به توان n حالت داریم و مقدارها از صفر تا یکی کمتر از اون میرن؛ برای همین ۸ بیت بازهٔ صفر تا ۲۵۵ رو پوشش میده.
دور زدن یعنی باقیمانده
wrapped = value mod 2^n
در این شبیهسازی، وقتی ورودی از ظرفیت بگذره، مقدار ذخیرهشده برابر باقیماندهٔ تقسیم ورودی بر تعداد حالتهای ممکن میشه. بعد از آخرین مقدار دوباره از صفر شروع میکنه.
تعداد دورها رو هم ببین
overflow_count = floor(value/2^n)
عدد «تعداد دور» میگه ورودی چند بار از ظرفیت کامل رد شده. مثلاً در ۴ بیت هر ۱۶ عدد یک دور تازه است؛ پس ۳۲ دو دور کامل میزنه.
این مدل، همهٔ رایانهها نیست
اینجا عددها بدون علامت و غیرمنفی هستن و همیشه دور میزنن. برنامهها و پردازندههای واقعی ممکنه با سرریز رفتار متفاوتی داشته باشن؛ بعضی خطا میدن یا نوع عدد رو عوض میکنن.
سؤالت رو بپرس، جوابش رو هم ببین
وقتی توی چت دربارهٔ یک مفهوم درس میخونی، دستیار هوش مصنوعی میتونه شبیهسازی مرتبط رو کنار توضیحش نشون بده. پارامترها رو تغییر میدی و با کمک توضیح بعدی، نتیجه رو بهتر میفهمی.
شروع یادگیری با چتبرای ادامه در چت، وارد مسیر شروع و ورود میشی. نتیجهٔ این آزمایش به چت منتقل نمیشه.
نمونهٔ نمایشی از آموزش در چت
چرا ۲۵۶ با ۸ بیت بهجای ۲۵۶، صفر نشون میده؟
با ۸ بیت بدون علامت فقط ۲۵۶ حالت از صفر تا ۲۵۵ داریم. وقتی ورودی ۲۵۶ میشه، یک دور کامل زده و باقیماندهٔ تقسیمش بر ۲۵۶ برابر صفره؛ این رفتار همین مدل دورزننده است و برای همهٔ نرمافزارها قانون همیشگی نیست.
سؤالهای رایج
چرا بیشترین مقدار ۸ بیت ۲۵۵ه، نه ۲۵۶؟
۸ بیت ۲۵۶ حالت دارن، ولی حالتها از صفر شروع میشن؛ پس آخرین مقدار ۲۵۵ه.
مقدار ذخیرهشده چطور حساب میشه؟
مدل ورودی رو بر تعداد حالتهای ممکن تقسیم میکنه و باقیمانده رو نگه میداره. برای ۸ بیت، این تعداد ۲۵۶ه.
آیا عدد میتونه چند دور بزنه؟
بله. تعداد دور برابر با تعداد دفعاتیه که ورودی از ظرفیت کامل رد شده؛ مثلاً ۳۲ با ۴ بیت دو دور کامل میزنه.
این شبیهساز عددهای منفی رو هم داره؟
نه؛ ورودی از صفر تا ۶۵۵۳۵ه و مدل فقط عددهای صحیح نامنفی رو میگیره.
همهٔ زبانهای برنامهنویسی با سرریز دور میزنن؟
نه. رفتار به زبان، نوع عدد و موقعیت اجرا بستگی داره؛ بعضی سیستمها بهجای دور زدن خطا میدن یا شکل دیگری از مقدار رو نگه میدارن.