结论
先说结论
原码
无法做到正+负的运算而补码
可以
反码
是原码
转补码
的中间产物
转换
正数的原码=反码=补码
负数:反码=~abs(原码)
补码=反码+1
原码
在计算机中所有的数据都是表示为2进制的。原码就是直接将10进制转化为补码。并用最高位来表示数字的正负。(0表示正,1表示负)
2的原码为:0000 0000 0000 0010
-2的原码为:1000 0000 0000 0010
接下来我们来试验一下加法(-2+2)
//二进制运算逢2进1
0000 0000 0000 0010+
1000 0000 0000 0010=
1000 0000 0000 0100
结果为1000 0000 0000 0100转回十进制就是2-+2=-4!出现了危机。原码无法做到正+负的运算
补码
补码可以正确的表示计算机中的正+负也就是减法运算。
按照我们小学6年的努力学习成果,在不出什么意外的情况下-2+2=0。而补码可以表示计算机中的正+负也就是减法运算。因此2+(-2的补码)=0。
2的原码:0000 0000 0000 0010+
-2的补码:xxxx xxxx xxxx xxxx=
0:0000 0000 0000 0000
逆推可得-2的补码:1111 1111 1111 1110
- 推断公式
将-2的原码和补码比较一下就可以得到补码的推断公式:
正数的补码为其自身
负数的补码:
1. 取绝对值转2进制
2. 按位取反
3. 加1
我们来验证一下
abs(-2)转2进制->0000 0000 0000 0010
~0000 0000 0000 0010=1111 1111 1111 1101//按位取反
加1得最终结果:1111 1111 1111 1110
关于补码可以看一下【一听就懂】什么是补码?
反码
反码是求补码过程中的中间产物,原码减1就是反码也就是说
(-2)的反码=~abs(-2)