变量intVar是原始int,bb[]是字节数组{0x02,0xF7,0x8B,0xF9};
intVar = bb[0];
//intVar = 00000002
intVar <<= 8;
//intVar = 00000200
intVar |= bb[1];
//intvar = fffffff7
为什么???
最佳答案
原因是符号扩展。使用:
intVar = 0xFF & bb[0];
//intVar = 00000002
intVar <<= 8;
//intVar = 00000200
intVar |= 0xFF & bb[1];
// intVar = 000002F7
使用负字节(java字节有符号)作为int会产生负int,并且因为java使用二进制补码,所以所有前导位都将为1。使用0xFF将得到最低8位中的字节和 24 个前导 0。
关于java - java 按位或错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13947998/