我有以下Java代码:
字节值=0xfe;//对应于-2(有符号)和254(无符号)
int结果=值&;0xff;
打印时的结果是254,但我不知道这段代码是如何工作的。如果&运算符只是按位的,那么为什么它不生成字节而生成整数呢
它将result设置为将value的8位放入result的最低8位后得到的(无符号)值
这样做之所以必要,是因为byte在Java中是一种有符号类型。如果你只是写:
int result=value;
然后,result将以值ff ff fe而不是00fe结束。另一个微妙之处是&被定义为仅对int值1进行操作,因此发生的情况是:
值被提升为int(ff ff ff fe)0xff是一个int文本(00ff)&用于为结果生成所需的值
(关键是到int的转换发生在应用&;运算符之前。)
嗯,不完全是。&</如果任一操作数为long,则code>运算符也会处理long值。但不是在字节上。请参阅Java语言规范第15.22.1节和第5.6.2节。