当前位置:  开发笔记 > 编程语言 > 正文

java位操作

如何解决《java位操作》经验,为你挑选了2个好方法。

谁想到Java发明时应该签名的字节应该被取出并用芹菜的湿棒殴打直到他们哭:-)

你可以通过转换为int来做你想做的事情,并确保你永远不会将1移到顶部位,如下所示:

byte x = -1;
int x2 = ((int)x) & 0xff;
for(int i = 0; i < 8; i++)
{
    x2 = (x2 >>> 1);
    System.out.println("X: " + x2);
}

你的特殊问题是因为>>>正在转换为int来进行移位,然后你将它转换回一个字节,如下所示:

byte x = -1;
int x2 = ((int)x) & 0xff;
int x3;
int x4 = x2;
for(int i = 0; i < 8; i++)
{
    x2 = (x2 >>> 1);
    System.out.println("X2: " + x2);
    x3 = (x >>> 1);
    x = (byte)x3;
    x4 = (x4 >>> 1);
    System.out.println("X: " + x3 + " " + x + " " + x4);
}

哪个输出:

X2: 127
X: 2147483647 -1 127
X2: 63
X: 2147483647 -1 63
X2: 31
X: 2147483647 -1 31
X2: 15
X: 2147483647 -1 15
X2: 7
X: 2147483647 -1 7
X2: 3
X: 2147483647 -1 3
X2: 1
X: 2147483647 -1 1
X2: 0
X: 2147483647 -1 0

您可以清楚地看到x和x3不起作用(即使x3正确移位,将其转换回x中的字节再次将其设置为-1).x4工作得很好.



1> paxdiablo..:

谁想到Java发明时应该签名的字节应该被取出并用芹菜的湿棒殴打直到他们哭:-)

你可以通过转换为int来做你想做的事情,并确保你永远不会将1移到顶部位,如下所示:

byte x = -1;
int x2 = ((int)x) & 0xff;
for(int i = 0; i < 8; i++)
{
    x2 = (x2 >>> 1);
    System.out.println("X: " + x2);
}

你的特殊问题是因为>>>正在转换为int来进行移位,然后你将它转换回一个字节,如下所示:

byte x = -1;
int x2 = ((int)x) & 0xff;
int x3;
int x4 = x2;
for(int i = 0; i < 8; i++)
{
    x2 = (x2 >>> 1);
    System.out.println("X2: " + x2);
    x3 = (x >>> 1);
    x = (byte)x3;
    x4 = (x4 >>> 1);
    System.out.println("X: " + x3 + " " + x + " " + x4);
}

哪个输出:

X2: 127
X: 2147483647 -1 127
X2: 63
X: 2147483647 -1 63
X2: 31
X: 2147483647 -1 31
X2: 15
X: 2147483647 -1 15
X2: 7
X: 2147483647 -1 7
X2: 3
X: 2147483647 -1 3
X2: 1
X: 2147483647 -1 1
X2: 0
X: 2147483647 -1 0

您可以清楚地看到x和x3不起作用(即使x3正确移位,将其转换回x中的字节再次将其设置为-1).x4工作得很好.



2> Neil Coffey..:

请记住:

按位运算的操作数总是被提升为至少一个int!

演员阵容总是涉及签名延期.

所以当你这样做(x >>> n)时,即使你将x定义为一个字节,出于移位的目的,它也会首先转换为int.如果被转换的字节是负数,那么所有添加到"int"的"额外位"(因此,最终的int的最左边24位)将被设置为1.或者换一种方式,如果是原始的byte是-1,你实际上移位的是-1作为int,即32位数,所有32位都设置为1.将此右移1-8位仍然会导致底部8位全部设置为1,因此当你转回一个字节时,你得到一个字节,其中所有8位设置为1,或者换句话说,字节值为-1.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有