您的位置:首页

负数的二进制表示

2016-06-11 16:59 204 查看
在二进制中,用最高位来表示整数和负数。

比如

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: