我对按位和移位操作进行了一些研究,以解释我在《我的世界》代码中找到的代码示例:

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


eventButton始终为0,1或2。Bitshift会不会总是使左侧部分为0并使其返回0?

最佳答案

几乎可以肯定,您会弄错,eventbutton可能有很多不同的值。问题是,eventButton本身并不有趣。我怀疑eventButton实际上是打包在一起的几个不同的值。

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

10-08 09:07