什么是价值与价值;0xff在Java中做什么?

我有以下Java代码:

字节值=0xfe;//对应于-2(有符号)和254(无符号)
int结果=值&0xff;

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

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

这样做之所以必要,是因为byte在Java中是一种有符号类型。如果你只是写:

int result=value;

然后,result将以值ff ff fe而不是00fe结束。另一个微妙之处是&amp被定义为仅对int1进行操作,因此发生的情况是:

  1. 被提升为intff ff ff fe
  2. 0xff是一个int文本(00ff
  3. &amp用于为结果生成所需的值

(关键是到int的转换发生在应用&运算符之前。)

嗯,不完全是。&amp</如果任一操作数为long,则code>运算符也会处理long值。但不是在字节上。请参阅Java语言规范第15.22.1节和第5.6.2节。

发表评论