4

我在理解 java 中的按位 OR 时遇到了麻烦。我正在阅读 Jeff Friesen 撰写的名为“Apress Starting Java7”的 Java 编程书籍。

在那本书的第 31 页,作者给出了两个 8 位二进制数,并对这两个数进行了按位或运算。他说过:

0B0001 1010 | 0B1011 0111 结果为 0000 0000 0000 0000 0000 0000 1011 1111

然后他这么说,我引用:

“最后三行中的 &、^ 和 | 运算符首先将它们的字节整数操作数转换为 32 位整数值(通过符号位扩展,将符号位的值复制到额外的位中),然后再执行它们的操作。”

现在,如果我正确理解0B0001 1010符号位扩展的前 8 位数字()变为(32 位数字):

0B0000 0000 0000 0000 0000 0000 0001 1010

符号位扩展的第二个数字 ( 0B1011 0111) 变为:

0B1111 1111 1111 1111 1111 1111 1011 0111

如果我按位或这两个扩展数字,我得到:

0B1111 1111 1111 1111 1111 1111 1011 1111

但作者得到:

0B0000 0000 0000 0000 0000 0000 1011 1111

谁能告诉我在这方面哪里错了?我的意思是谁能告诉我为什么我的答案与作者的不同以及我在哪里犯了错误?

4

1 回答 1

0

0B10110111二进制文字的值为 type int。它不是从 隐式提升的byte,因此没有符号扩展。

如果是这样,(byte)0B10110111那么您将拥有您所期望的。

于 2013-04-06T22:17:25.493 回答