如果我们向左移位一点,最左边变成1那么怎么计算呢?

If we Shift a bit to left and left most becomes 1 then how to calculate?

我遇到了一个奇怪的问题。这是代码:

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。这是为什么?

因为一个int有8个多位。

一个32位整数 0000 0000 0000 0000 0000 0000 1011 0000 不是负数。

您将 int (0000 0000 0000 0000 0000 0000 0001 0110) 视为 byte (0001 0110)。但是 int 原始类型有 32 位(双字),而不仅仅是 8 位。

0000 0000 0000 0000 0000 0000 0001 0110 (2)
<<
3
=
0000 0000 0000 0000 0000 0000 1011 0000 (2)
=
176 (10)