知识卡片

溢出是有限位数表示无限数的代价

专业/工作 · 1285.e

内容

任何固定长度的[[二进制补码统一加减法电路]]系统都只能表示一个有限区间内的整数,一旦运算结果超出这个区间就会产生溢出——例如 4 位系统里 5+4 本应得 9,却会因截断错误地显示为 -7。判断是否溢出的方法很简单:两个正数相加得到负数模式,或两个负数相加得到正数模式,就说明发生了溢出。历史上真实发生过:某医院系统用 16 位存储从 1900 年起的天数,1989 年 9 月19日恰好是第 32768 天,超出 16 位补码能表示的最大正值导致系统故障。发散:溢出提醒我们,计算机里的”数”从来不是数学意义上无限精确的数,而是被物理位数截断的近似模型,工程决策时选择位宽本质上是在为”未来会不会用到这个上限”下注。

参考来源

《计算机科学概论》第1章《数据存储》