【发布时间】:2013-08-02 00:22:16
【问题描述】:
考虑:
int a = 0;
a |= 1 << a;
System.out.println(a);
它打印“1”。为什么?我以为左位移 0 任意次数仍然是 0。它从哪里拉出 1?
【问题讨论】:
-
哦,应该是
标签: java bitwise-operators bit-shift
考虑:
int a = 0;
a |= 1 << a;
System.out.println(a);
它打印“1”。为什么?我以为左位移 0 任意次数仍然是 0。它从哪里拉出 1?
【问题讨论】:
标签: java bitwise-operators bit-shift
表达式1 << a; 会将值1、a 移动次数。
换句话说,你的值是 1:
0000001
现在,您将整个内容向左移动 0 位。然后你有:
0000001
然后你有:
a |= 1 << a;
解析为:
a = 0000000 | 0000001
或者:
a = 1;
您可能混淆了操作数。如果您尝试将值 0 向左移动一位,您需要:
a |= a << 1;
【讨论】:
0 | 1
a |= a << 1;。正确,a 为零,因此表达式解析为 a = 0 | 1;
您以错误的方式使用运算符
int a = 0;
a |= a << 1;
System.out.println(a);
【讨论】:
您将文字 1 左移了变量 a。变量a 的值为零。 1<<0 = 1
所以你刚刚得到了你的变量翻转。尝试反转变量。
【讨论】: