负数的二进制表示

Posted woqiaoxun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了负数的二进制表示相关的知识,希望对你有一定的参考价值。

在二进制中,用最高位来表示整数和负数。

比如 

        System.out.println(Integer.toBinaryString(1));
        System.out.println(Integer.toBinaryString(-1));            

会输出

整数前面的0被省略了。

或者这样

public void test(){
        System.out.println(Integer.toBinaryString(Integer.MAX_VALUE));
        System.out.println(Integer.toBinaryString(-1));
    }

输出

显而易见,最大值前面省略了一个0。

应该是

01111111111111111111111111111111

这也解释了我一直以来的困惑。

所以,最高位如果是0则表示正数,如果为1则表示为负数。

 

在计算机中,负数以其正值的补码形式表达

比如

        System.out.println(Integer.toBinaryString(33));
        System.out.println(Integer.toBinaryString(-33));

输出

我们取后八位,好显示

00100001(33)

11011111(-33)

正数变为负数的过程为1.取反,2.加1

①取反

00100001 取反为

11011110

②加1

11011110加1后为

11011111

所以-33的二进制表示为

11011111

 

表达的什么玩意啊。。。

参见:http://www.cnblogs.com/junsky/archive/2009/08/06/1540727.html

 

以上是关于负数的二进制表示的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer11:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(进制转换,补码反码)

Int32 最大的数值是多少???(附十进制十六进制相互转换且包含正负数的java代码)

负数的二进制表示

以其他基数表示负数

获取码值和进制转换系统(包括正负数小数)

负数在java中的二进制的表示形式