【补码】
1、补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
2、为何要使用补码.
补码将减法问题转化为了加法问题。使用同余原理,巧妙地将符计算也藏了进去。
按位取反的本质:以 Signed Byte 的前7位为例,对x按位取反,得的值为 127-x。例如,1,前7位按位取反,会得到 127-1=126。
补码为按位取反,且+1。还有 Signed Byte 为例,例如,1,前7位按位取反,会得到 127-1=126,+1后为127。
所以,Signed Byte下,-1的补码,符号位为1,其余7位为FFF|FFFF。
那如何由补码求得原值呢,对 FFF|FFFF按位取反,其值为 127-FFF|FFFF=0,再加上1,就等于原值1。
可以发现,原值=>补码的过程中需要加1,补码=>原值的过程中也需要加1。以变量来推一下。
原值 x,补码为 127-x+1。
原值 127-x+1,按位取反为 127-(127-x+1) = (127+127+x-1)%127 = x-1。比原值x少了1。
所以从补码值域得到原值,需要按位取反再+1。
参考:
1、https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
2、https://www.cnblogs.com/dyllove98/archive/2013/08/04/3236802.html