变量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会导致负整数,并且由于java使用二进制补码,因此所有前导位将为1。与0xFF的和将使您拥有最低8位的字节和24个前导的字节0s。