负数的二进制表示
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的个数。其中负数用补码表示。(进制转换,补码反码)