我正在研究位移,我遇到了这个问题。
我有两个int:
int x = 1;
int y = 2;
有什么区别:
x = x << (31 + 1);
和
y = y << 31;
我认为结果是相同的(即 x 和 y 都等于 1),但它们不是......我不明白为什么。2 只是 1,“1”位向左移动了一个空格。
谢谢!
我的意思是当我们不能再左移时,我们不回到开头吗?
编辑:让我澄清一下我的想法:
我们从 x = 1 开始,所以是:
00000000 00000000 00000000 00000001
然后我们将其左移 31 +1(或 32)。这给了我们:
00000000 00000000 00000000 00000001
这也是1。
然后我们做 y = 2,那就是
00000000 00000000 00000000 00000010
我们将其左移 31。这也给了我们:
00000000 00000000 00000000 00000001
因此,我们得到 x = y = 1。我知道这是错误的,但谁能解释为什么?