我无法理解java中的逐位OR。我正在阅读一本名为" Apress Beginning Java7"作者:Jeff Friesen。
在第31页的那本书中,作者提供了两个8位二进制数,并对这两个数字进行了逐位OR运算。他说:
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
有谁可以告诉我错在哪里?我的意思是,任何人都可以告诉我为什么我的答案与作者和答案不同 我犯了哪个错误?
答案 0 :(得分:1)
0B10110111
二进制文字的值为int
。它不会从byte
隐式提升,因此没有符号扩展名。
如果是(byte)0B10110111
那么你会得到你期望的结果。