首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

!将java中int类型在内存中的二进制形式,按位输出

2012-02-04 
求助!将java中int类型在内存中的二进制形式,按位输出。RT.今天闲来无事,突然想看看亲眼看看数据在内容中的

求助!将java中int类型在内存中的二进制形式,按位输出。
RT.
今天闲来无事,突然想看看亲眼看看数据在内容中的二进制表示。
下面是关键代码:
当变量x为正数的时候,结果是正确的。但是为负数的时候最高位却是0.其实应该为1。
-3的补码是:1111 1111 1111 1111 1111 1111 1111 1101
但是以下代码输出的结果是 0111 1111 1111 1111 1111 1111 1111 1101。最高位不正确。求知情人士帮忙分析一下啊。
int x = -3;
for(int i=31;i>=0;i--) {
  System.out.print(((x&(int)Math.pow(2,i))>>>i)+" ");
}
说一下我的思路,x&(int)Math.pow(2,i)从最高位开始依次分离每一位上的数据。然后就是把分离出来的数据转换成一个int类型,打印出来。


[解决办法]
int i=214332;
System.out.println(Integer.toBinaryString(i));
// 110100010100111100

你也可以通过Integer的toHexString方法查看十六进制字符串表示。
[解决办法]
(int) Math.pow(2, i) 当 i = 31 时得到的值为 2147483647,这个值是 Integer.MAX_VALUE 也就是:

0111 1111 1111 1111 1111 1111 1111 1111

最高位为 0,跟负数进行位与运算时,符号位会被清为 0,你的代码改成这样就可以用了:

Java code
for (int i = 31; i >= 0; i--) {    System.out.print(((x & (1 << i)) >>> i) + " ");} 

热点排行