這裏的一個微小的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