1
我有一个大小为4096的字节数组。我用0xA2填充字段0,用0xF0填充字段1。Java:将byte []位移位操作转换为short
我的目标是将字段0向左移8位,然后对字段1执行OR操作并将其存储到一个短变量中。
在纸上的结果应该是:
1010 0010 (0xA2)
>>shift left by 8 bits
1010 0010 0000 (0xA20)
>>OR-operation with field 1
1010 0010 0000 (0xA20)(field 0)
1111 0000 (0xF0)(field 1)
----------------------
1010 1111 0010 (0xAF2)
已经有a similar post但它只是帮助了一点点。 即使我投了它似乎切断了转移的位。 这是代码。
public static void main(String[] args) {
byte[] myMem = new byte[4096];
myMem[0] = (byte)0xA2;
myMem[1] = (byte)0xF0;
short test = (short)(myMem[0] << 8 | myMem[1]);
}
调试器显示以下值:
myMem[0] = -94 (which is correctly 0xA2)
myMem[1] = -16 (which is correctly 0xF0)
test = -16 (which is wrong, 0x00A2. Should be -23824 or 0xA2F0).
带我做了一个合乎逻辑的错误,我想,我找不到它虽然。
有趣。我想我应该读更多关于Java的字节数据类型。这是我在问自己为什么你的答案奏效后发现的帖子:http://stackoverflow.com/questions/19061544/bitwise-anding-with-0xff-is-important – RnBandCrunk