Java和0xff的值是什么?我有以下Java代码:byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned)int result = value & 0xff;打印时结果是254,但我不知道这段代码是如何工作的。如果&运算符只是按位,那么为什么它不会产生一个字节而是一个整数呢?
3 回答

慕婉清6462132
TA贡献1804条经验 获得超2个赞
它设置result
为(无符号)值,将8位置value
于最低8位result
。
这样的事情是必要的,因为它byte
是Java中的签名类型。如果你刚才写道:
int result = value;
然后result
最终得到的价值ff ff ff fe
而不是00 00 00 fe
。更进一步的细微之处在于,它&
被定义为仅在int
值1上运行,因此会发生以下情况:
value
被提升为int
(ff ff ff fe
)。0xff
是一个int
文字(00 00 00 ff
)。将
&
被施加到得到所希望的值result
。
(该点是,转换int
发生之前的&
施加操作者)。
1 嗯,不太好。该&
运营商工作的long
价值以及,如果操作数是一个long
。但不是byte
。请参阅Java语言规范,第15.22.1节和第5.6.2节。

阿晨1998
TA贡献2037条经验 获得超6个赞
以32位格式系统的十六进制值0xff
表示00000000000000000000000011111111
即255(15*16^1+15*16^0)
十进制。并且按位&运算符屏蔽与第一个操作数中相同的8个最右位。
添加回答
举报
0/150
提交
取消