补码
2018-06-14 本文已影响1人
sortinnauto
计算机中用补码来表示负数。
以Java语言为例,int类型为32位4字节。
- 怎么求补码?
正数的补码为其本身;负数的补码为对负数绝对值的二进制表示取反加一。
- 补码的好处
在Java中,int类型可以表示232个数,范围为-231 ~ 231-1。如果不用补码直接用二进制表示的话,最高位应为符号位,那么表示范围为-(231-1) ~ 231-1,这之中会有+0和-0两种0的存在,且在算术运算中,直接表示会出现错误。而负数使用补码表示则可以避免这两种情况。如:
16+(-8)=?
下面仅写出二进制的后8位
直接表示:
0001 0000
+ 1000 1000
_______________________________________
1001 1000
很显然,结果为负数,是不正确的。
正数直接表示,负数用补码表示:
0001 0000
+ 1111 1000
_______________________________________
10000 1000
我们发现结果为9位,如果补齐我们省略的那些位,就会发现结果为33位,对于int型来说,最高的第33位为溢出位,机器会自动舍去。最终我们得到的结果为0000 1000
,为正确答案。