这里的一个微小的java程序逻辑和算术移位的输出
public class otherclass {
public static void main(String[]args){
byte a=-5;
byte d= (byte) (a>>>1);
System.out.println(d);
byte e= (byte) (a>>>2);
System.out.println(e);
byte f= (byte) (a>>1);
System.out.println(f);
byte g= (byte) (a>>2);
System.out.println(g);
}
}
输出:
-3
-2
-3
-2
第二两个输出(那些-3和-2的逻辑移位的)我明白了。
负5是11111011
算术移位向右移动并在左侧的额外添加的位是一样的MSB。所以一个移动使得11111101
是负数3.负数2也是好的。
逻辑转变应该是零添加到左侧。 11111011
应该变成01111101
这就是125.它怎样输出负值3?
注意,在类型'int'(4个字节)的值发生的偏移。 – 2015-03-31 22:35:52
嗯,你是什么意思?它不适用于字节变量? – 2015-03-31 22:36:30
它是一个整数类型,由由哪种类型确定的特定字节数表示。例如,'int'有32个字节。 'short'是16个字节,而'byte'是8。我不明白@SotiriosDelimanolis评论或者虽然 – 2015-03-31 22:38:56