按位操作字节会发生什么?

时间:2013-06-05 07:40:10

标签: java bitwise-operators

看看这段代码:

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

输出:

-124
132

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

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

2 个答案:

答案 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。