计算机系统、网络结构知识计算机硬件&计算机系统&计算机知识点

补码

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,为正确答案。

上一篇下一篇

猜你喜欢

热点阅读