– | +1 | -1 | 正数3码合一 |
---|---|---|---|
原码 | 0000_0001 | 1000_0001 | 最高位0表示正数,1表示负数。原码计算得原码 |
反码 | 0000_0001 | 1111_1110 | 除最高位之外取反,反码计算得反码 |
补码 | 0000_0001 | 1111_1111 | 反码+1,符号位不变,符号位只在两个补码运算时改变,补码计算得补码 |
自问1:为什么不直接用原码进行加减?
答:1+(-1)=【0000_0001】-【1000_0001】=【10000010】=-2;减法运算会出错。
自问2:反码进行加减会有什么缺点?
答:1+(-1)= [0000 0001]反 + [1111 1110]反=-0;会有+0和-0
自问3:补码运算好在哪?
答:1+(-1)=[0000 0001]补 + [1111 1111]补= [0000 0000]补=0;消除±0
-1-127的结果应该是-128, 在用补码运算的结果中, [1000 0000]补 就是-128. 但是注意因为实际上是使用以前的-0的补码来表示-128, 所以-128并没有原码和反码表示.(对-128的补码表示[1000 0000]补算出来的原码是[0000 0000]原, 这是不正确的)
原文:https://blog.csdn.net/qq_40016949/article/details/80207662