5

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

//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

4 回答 4

7

首先0x00001111是十六进制,比255-大16^3 + 16^2 + 16 + 1 = 4369,并且byte溢出。看看这里如何表示二进制数或只使用shifted & 15.

于 2011-11-14T15:53:30.897 回答
5

您的掩码必须是二进制00001111,等于十六进制 0x0F。

byte mask = (byte)0x0F;
于 2011-11-14T15:55:52.223 回答
4

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

byte binaryLit = (byte)0b00001111;

0xsomenumbers 是十六进制文字,并且在 java7 之前不支持二进制文件。

于 2011-11-14T16:04:22.690 回答
0

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

于 2011-11-14T15:53:48.043 回答