gpt4 book ai didi

java - 在 Java 中执行按位或和 32 位符号位扩展时出错

转载 作者:搜寻专家 更新时间:2023-11-01 03:40:28 28 4
gpt4 key购买 nike

我无法理解 Java 中的按位或。我正在阅读 Jeff Friesen 的一本名为“Apress Beginning Java7”的 Java 编程书籍。

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

0B0001 1010 | 0B1011 0111 results in 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

谁能告诉我哪里错了?我的意思是任何人都可以告诉我为什么我的答案与作者和我哪里弄错了?

最佳答案

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

如果它是 (byte)0B10110111 那么您就会得到您所期望的。

关于java - 在 Java 中执行按位或和 32 位符号位扩展时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15856589/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com