[英]Error in performing bit-wise OR and 32 bit sign bit extension in Java
我无法理解java中的逐位OR。 我正在阅读Jeff Friesen撰写的名为“Apress Beginning Java7”的Java编程书。
在第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
任何人都可以告诉我错在哪里吗? 我的意思是,有人可以告诉我为什么我的答案与作者的不同以及我犯了错误的地方?
0B10110111
binary literal的值为int
类型。 它不是从byte
隐式提升的,因此没有符号扩展。
如果它是(byte)0B10110111
那么你会得到你期望的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.