java - 当按位操作字节时会发生什么?

标签 java bitwise-operators

看一下这段代码:

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/

相关文章:

java - 为 java 项目生成 javadoc

java - InetAddress.getByName 无法解析为类型

java - 将 PDF 文档索引到 Solr - 错误 500 java.lang.NoClassDefFoundError : org/eclipse/jetty/server/MultiParts

c++ - 在 C++ 中对 int 使用按位与

c - C中位运算符的应用及其效率?

java - PDFBox、BBox、页码?

java - @Valid (jsr 303) 在 Spring mvc 3.0 中不起作用

java - 用于清除 Canvas 的移位位,需要简短代码的解释

c# - 如何将日期和时间打包成 32 位?

javascript - 按位求反和按位异或 1 不等价?