按位和位移操作

时间:2016-08-16 18:35:40

标签: java bit-manipulation

我对Bitwise和Bit Shift操作进行了一些研究,以解释我在Minecraft Code中找到的代码示例:

public static int extractDragMode(int eventButton)
{
    return eventButton >> 2 & 3;
}

eventButton始终为0,1或2.Bitshift总是将左边的部分设为0并使其返回0?

3 个答案:

答案 0 :(得分:2)

如果eventButton只能等于0,1或2,那么按位操作将始终返回0.

由于0,1和2都是2位数,因此在任何方向上将它们按位向位移2位将始终使它们变为0:

00 >> 2 = 00
01 >> 2 = 00
10 >> 2 = 00

0 & /*any number*/始终为0

答案 1 :(得分:0)

基本上你将 eventButton 的值除以4并且只获得2个较低有效位

所以如果 eventButton 包含的值如下:0,1或2 然后结果只能为零..

答案 2 :(得分:0)

几乎可以肯定你错了,事件按钮可能有很多不同的值。事实是,eventButton本身并不有趣。我怀疑eventButton实际上是几个不同的值组合在一起。

这是一种称为位掩码的技术。事件按钮在单个int中包含多条信息。在这种情况下,我们对拖动模式感兴趣(通过方法名称extractDragMode判断)。拖动模式为0,1或2.这只需要两位,这两位是int的第3和第4位。通过将它们向右移动两位,我们将它们放入前两个位置。然后我们用3来将int中的所有其他位归零。我们现在剩下的就是拖动模式位的值。