私は奇妙な問題に遭遇しました。コードは次のとおりです。ビットを左にシフトすると左が1になり、計算方法は?
public class ShiftLeft {
public static void main(String[] args) {
int c = 22;
int d = c << 3;
System.out.println("c << 3 = "+d);
}
}
回答は176ですが、手で計算してみましょう。
+22 = 0001 0110
1011 0000 <<3
左端のビットは1であるため、負の数でなければなりません。
Sign + magnitude = 1011 0000
magnitude = 011 0000
100 1111 ---1s compliment
101 0000 ---2s compliment
adding left bit 1101 0000 =-80
答えは、ほとんどのビットを符号としてカウントしない場合にのみ、176になります。何故ですか?
https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.2 –