【发布时间】: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