如果我们向左移位一点,最左边变成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)
我遇到了一个奇怪的问题。这是代码:
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)