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

Val*_*uca 1 java

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

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

我也注意到这种行为也是短路和冲击.当MSB被设置时,MSB将无论如何都保持设置,并且当该值被转换为更大的值(ala int)时,"新"空间将被设置位填充.

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

Mar*_*nik 6

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

是的,这是正确的.即使您没有显示代码,很明显您正在使用>>右移,您希望>>>操作员的行为.前者确实签署了延伸,以保留通常想要的两个权力除以负数的效果.后者是纯位域右移运算符.