4

考虑:

   int a = 0;
   a |= 1 << a;
   System.out.println(a); 

它打印“1”。为什么?我认为左位移 0 任意次数仍然是 0。它从哪里拉出 1?

4

3 回答 3

12

该表达式1 << a;将移位值1a次数。

换句话说,您的值为 1:

0000001

现在,您将整个内容向左移动 0 位。然后你有:

0000001

然后你有:

a |= 1 << a;

解决为:

a = 0000000 | 0000001

或者:

a = 1;

您可能混淆了操作数。如果您尝试将值 0 向左移动一位,您需要:

a |= a << 1;
于 2013-08-02T00:25:49.357 回答
4

您以错误的方式使用运算符 <<。它必须是:

int a = 0;
a |= a << 1;
System.out.println(a);
于 2013-08-02T00:25:28.857 回答
2

您将文字左移1变量a。变量的值a为零。1<<0 = 1

所以你刚刚得到了你的变量翻转。尝试反转变量。

于 2013-08-02T00:26:12.733 回答