Java是否忽略了MSB上的按位运算?

时间:2014-02-06 20:13:33

标签: java

我目前在java中有一个奇怪的功能,我试图规避。如果我将一个字节定义为0x80并且我向右移位1位置,则java将输出0xC0,而不是0x40。有人知道为什么吗?

此外,如果我输入0x70,并向右移1位置,它将正确输出0x38。

我也注意到这种行为也是短路和整数。当MSB被设置时,MSB将保持无限设置,当该值被转换为更大的值(ala int)时,'new'空格将被设置位填充。

基本上我要问的是这种行为是否正确?

1 个答案:

答案 0 :(得分:6)

  

基本上我要问的是这种行为是否正确?

是的,这是正确的。即使您没有显示代码,很明显您正在使用>>进行右移,您期望>>>运算符的行为。前者执行签名扩展以保留通常想要的除以2的幂除以负数的效果。后者是一个纯粹的位域右移运算符。