为按位运算声明掩码

Tri*_*ith 5 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
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*hev 7

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


Rei*_*ica 5

您的掩码需要是二进制 00001111,等于十六进制0x0F.

byte mask = (byte)0x0F;
Run Code Online (Sandbox Code Playgroud)