【问题标题】:Error in performing bit-wise OR and 32 bit sign bit extension in Java在 Java 中执行按位 OR 和 32 位符号位扩展时出错
【发布时间】:2013-04-06 22:06:35
【问题描述】:

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

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

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

然后他这么说,我引用:

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

现在,如果我正确理解符号位扩展的前 8 位数字(0B0001 1010)变为(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

谁能告诉我在这方面哪里错了?我的意思是任何人都可以告诉我为什么我的答案与作者的不同 我在哪里做错了?

【问题讨论】:

    标签: java binary bitwise-operators


    【解决方案1】:

    0B10110111 二进制字面量具有int 类型的值。它不是从byte 隐式提升的,所以没有符号扩展。

    如果是(byte)0B10110111,那么您将得到您所期望的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      • 2012-09-30
      • 2013-03-19
      相关资源
      最近更新 更多