补码

作者: sortinnauto | 来源:发表于2018-06-14 15:48 被阅读1次

    计算机中用补码来表示负数。
    以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,为正确答案。

    相关文章

      网友评论

        本文标题:补码

        本文链接:https://www.haomeiwen.com/subject/zhjyeftx.html