要限定数字的位数,运算结果超出了范围,就溢出了.
楼主给出的两个数,没有明确的位数,这就永远不会溢出.书上说要补成一样长的再算,在1101前面加4个1这样再算然后第一位就会进位了...随意说一个位数不清的数,计算、判断,就不规范。
计算机一般是8位,或16位的。
一个8位补码,所能表示的数字范围是:-128~+127。
计算十进制的加法:100 + 100 = 200
用8位补码来计算,就是:
0110 0100 + 0110 0100 = 1100 1000。并没有进位。
但是,结果并不是200的补码,而是-56的补码。
因为 200 的补码,需要 9 位二进制数。
这就是溢出了。厄 这么说就是只要结果一样就不是溢出吗运算结果,超出了指定位数所能表示的范围,就溢出了。
先要明确位数,然后就知道了范围,最后再讨论溢出与否。
不是随便给定两个数字,就能判定溢出不溢出的。16 位的补码,可表示:-32768~+32767。
计算十进制的加法:100 + 100 = 200
用 16 位补码来计算,就是:
0000 0000 0110 0100 +
0000 0000 0110 0100 =
0000 0000 1100 1000
结果,正是 200 的补码。
此时,就没有溢出。