我有以下Java代码:
byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned) int result = value & 0xff;
打印时结果为254,但我不知道此代码如何工作。如果&运算符只是按位运算符,那么为什么不生成字节而是取整数?
它设置result为将8位value放入的最低8位得到的(无符号)值result。
result
value
诸如此类的必要原因是byteJava中的一种签名类型。如果你刚刚写过:
byte
int result = value;
那么result最终将得到值ff ff ff fe而不是00 00 00 fe。另一个微妙之处在于,将&定义为仅对int值1进行操作,因此会发生以下情况:
int(ff ff ff fe)
0xf
int
(00 00 00 ff)
&
1 好吧,不完全是。该&运营商工作的long价值以及,如果操作数是一个long。但是没有byte。请参阅Java语言规范的15.22.1和5.6.2节。
long