为按位运算声明掩码

时间:2011-11-14 15:50:35

标签: java bit-manipulation bitmask

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

//Input value - 00111100
//I want to get the value of the bits at indexes 1-3 i.e 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

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

4 个答案:

答案 0 :(得分:7)

首先,0x00001111为十六进制,比255 - 16^3 + 16^2 + 16 + 1 = 4369byte溢出的数字更大。看here如何表示二进制数或只使用shifted & 15

答案 1 :(得分:5)

你的面具需要二进制 00001111,等于十六进制0x0F。

byte mask = (byte)0x0F;

答案 2 :(得分:4)

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

byte binaryLit = (byte)0b00001111;

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

答案 3 :(得分:0)

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

掩码的三个位