一尘不染

value&0xff在Java中有什么作用?

java

我有以下Java代码:

byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned)
int result = value & 0xff;

打印时结果为254,但我不知道此代码如何工作。如果&运算符只是按位运算符,那么为什么不生成字节而是取整数?


阅读 765

收藏
2020-03-13

共1个答案

一尘不染

它设置result为将8位value放入的最低8位得到的(无符号)值result

诸如此类的必要原因是byteJava中的一种签名类型。如果你刚刚写过:

int result = value;

那么result最终将得到值ff ff ff fe而不是00 00 00 fe。另一个微妙之处在于,将&定义为仅对int值1进行操作,因此会发生以下情况:

  1. value被提升为int(ff ff ff fe)
  2. 0xff是int文字(00 00 00 ff)
  3. &被施加到得到所希望的值result
    (该点是,转换int发生之前的&施加操作者)。

1 好吧,不完全是。该&运营商工作的long价值以及,如果操作数是一个long。但是没有byte。请参阅Java语言规范的15.22.1和5.6.2节。

2020-03-13