0

看看这段代码:

byte a = -124;
System.out.println(a);
System.out.println((a & 0xFF));

它输出:

-124
132

这对我来说非常非常令人惊讶。毕竟,byte它只包含 8 位,因此不应在andwith 0xFF(ie 11111111) 之后更改它。

一个可能的原因是 Java在执行按位运算之前转换byte为。int是这样吗?如果是这样,为什么?

4

2 回答 2

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
于 2013-06-05T07:49:19.237 回答
2

0xFF 确实是 int 类型。所以'a'在操作之前被提升为一个int。

于 2013-06-05T07:42:11.343 回答