关于有符号整数的一些思考
1.补码是什么?
计算机存储时,以补码表示负数,例如-1的补码是FFFFFFFF
2.补码如何计算?
因为补码的定义是零减去这个数的绝对值
例如如-2 == 0-2 == 00000000 - 00000002,零向高位借一位 = FFFFFFFF+1 -00000002 =FFFFFFFE
设x为真值的绝对值
由于x+x反 + 1 = 0,<==> 0-x = x反 +1 ,所以x反+1 =x补
得 x = 0 - x补 由上可知 x = (x反+1)反 +1 = x-1+1 = x
所以 x = x补反+1
所以无论是由真值转补码,还是补码转真值都是取反加一
例如: -5 的补码是 FFFFFFFB
而 80000002的真值是7FFFFFFE = 2,147,483,646(10)
80000000的真值是80000000 = 2,147,483,648(10)
3.为什么要使用补码?
因为计算机只会加不会减法,而减法的本质是相互抵消,x - y = x + (0 - y) = x + y补
例如:6-5 = 00000006 + FFFFFFFB , FFFFFFFB差5个数就溢出变成零,所以当 相加时 6里面的5就因为补上了 FFFFFFFB所缺少的5而消失了,从而实现了减法,变成了6-5 = 1
附加:这很像阴阳之道,正数为有,负数为缺,正负相合,始得证果。
一半以下的看作有,即为整数,取值范围为00000000~7FFFFFFF
一半及一半以上的,看作缺,即为负数,取值范围80000000~FFFFFFFF
相加后,将已经圆满的去掉,剩下的就是答案了
本文作者:乘舟凉
本文链接:https://www.cnblogs.com/czlnb/p/15418632.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步