나는 이상한 문제에 봉착했다. 코드는 다음과 같습니다.왼쪽으로 조금 이동하면 대부분 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 –