我正在研究一个开源代码,我遇到了以下一行
stringBytes[i] = (byte) (stringChars[i] & 0x00FF);
有人可以解释一下这行中究竟发生了什么吗?
答案 0 :(得分:10)
Char由Java中的2个字节组成,当然字节是单字节。
所以在这个操作中:
stringBytes[i] = (byte) stringChars[i] & 0x00FF
char值(16位)为二进制ANDED ,编号为0x00FF(二进制:0000 0011 1111 1111),使其为一个字节。
通过使用8 0s and 8 1s
的二进制ANDING,您基本上屏蔽了char值的8个最左边或最高有效位(MSB),因此只保留8个最右边或最低有效位(LSB)。然后代码使用强制转换(byte)
将结果值分配给一个字节,否则为int
值。
答案 1 :(得分:2)
与0x00FF进行AND运算仅保留最后8位有效位,并将其他位置零。
E.g.:
0xD2A5 & 0x00FF = 1101001010100101 & 0000000011111111 = 0000000010100101 = A5