为什么数据溢出会变负数,原因和解决办法是什么,补码是怎么算的
八位的补码是:0000 0000~1111 1111。
写成十进制就是:0 ~ 255。
其中的 0 ~ 127,是正数的补码。
而 128~255,则是-128 ~-1 的补码。
所能表示的范围是:-128 ~+127。
-----
例如:
按照补码运算:99 + 87 = 186。
超出了所能表示的范围,当然是溢出了。
即:正99+正87,却得到了-70 的补码。
希望对题主有所帮助,可以的话,帮忙点个采纳!
用一个最简单的例子,假设四位表示一个数,最高位是符号位
那么数值只有三位,也就是最大为1+2+4=7,其范围为-8到7
看看7的情况,二进制为:0111,符号位是0为正
如果7再加1,二进制就变成1000,最高位的符号位变成1为负
溢出变负数大概就是这个意思,当然正常的数比四位大得多,我只是讲这个意思