为按位操作声明掩码

我是这样的低级别操作的新手,我希望有人可以指出我必须在这里犯下的明显错误。

//Input value - 00111100 //I want to get the value of the bits at indexes 1-3 ie 0111. byte mask = (byte)0x00001111; // This gives 17 not the 15 I'd expect byte shifted = (byte)(headerByte >> 3); //shifted is 7 as expected byte frameSizeValue = (byte)(shifted & mask); //Gives 1 not 7 

看起来问题在于定义掩码的方式,但我看不出如何修复它。

您的掩码需要是二进制 00001111,等于hex0x0F。

 byte mask = (byte)0x0F; 

首先, 0x00001111是hex,这是一个大于255数字 – 16^3 + 16^2 + 16 + 1 = 4369并且byte溢出。 看这里如何表示二进制数或只使用shifted & 15

使用java 7,您可以创建二进制文字

 byte binaryLit = (byte)0b00001111; 

0xsomenumbers是一个hex文字,而java7之前不支持二进制文件。

你说你想屏蔽前三位,但正如Petar所说,0x001111不是位。 如果要屏蔽需要用7屏蔽的三个位