考虑:
int a = 0;
a |= 1 << a;
System.out.println(a);
它打印“1”。为什么?我认为左位移 0 任意次数仍然是 0。它从哪里拉出 1?
考虑:
int a = 0;
a |= 1 << a;
System.out.println(a);
它打印“1”。为什么?我认为左位移 0 任意次数仍然是 0。它从哪里拉出 1?
该表达式1 << a;
将移位值1
,a
次数。
换句话说,您的值为 1:
0000001
现在,您将整个内容向左移动 0 位。然后你有:
0000001
然后你有:
a |= 1 << a;
解决为:
a = 0000000 | 0000001
或者:
a = 1;
您可能混淆了操作数。如果您尝试将值 0 向左移动一位,您需要:
a |= a << 1;
您以错误的方式使用运算符 <<。它必须是:
int a = 0;
a |= a << 1;
System.out.println(a);
您将文字左移1
变量a
。变量的值a
为零。1<<0 = 1
所以你刚刚得到了你的变量翻转。尝试反转变量。