看看这段代码:
byte a = -124;
System.out.println(a);
System.out.println((a & 0xFF));
输出:
-124
132
这对我来说非常非常令人惊讶。毕竟,byte
只包含8位,所以在and
0xFF
之后(11111111
)不应该更改它。
一个可能的原因是Java在执行按位操作之前将byte
转换为int
。是这样的吗?如果是这样,为什么?
答案 0 :(得分:3)
默认情况下,Java对数字使用int基本类型。
如果要对除int以外的其他类型的整数基元执行按位运算,则可以显式转换操作数:
byte b = -124;
System.out.println("Byte: " + b);
System.out.println("Byte after bitwise and: " + (b & (byte) 0xFF));
上面的代码产生以下输出:
Byte: -124 Byte after bitwise and: -124
答案 1 :(得分:2)
0xFF确实是一个int类型。所以'a'在操作之前被提升为int。