看一下这段代码:
byte a = -124;
System.out.println(a);
System.out.println((a & 0xFF));
它输出:
-124
132
这让我非常非常惊讶。毕竟,byte
仅包含8位,因此在和
之后不应该用0xFF
更改它(即11111111
)。
一个可能的原因是Java在进行按位运算之前将byte
转换为int
。是这样吗?如果是这样,为什么?
最佳答案
默认情况下,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
关于java - 当按位操作字节时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16934144/