我有一个简单的问题:
int a = 0;
a |= 1<<a;
System.out.println(a);
打印“1”。为什么?我认为左移位0任意次数仍为0.哪里可以拉出1?
答案 0 :(得分:10)
表达式1 << a;
会将值1
,a
次移动。
换句话说,您的值为1:
0000001
现在,你将整个事物向左移动0位。然后你有:
0000001
然后你有:
a |= 1 << a;
哪个解析为:
a = 0000000 | 0000001
或者:
a = 1;
您可能将操作数混淆了。如果你试图将值0向左移一位,你需要:
a |= a << 1;
答案 1 :(得分:4)
您正在使用运营商&lt;&lt;以错误的方式。 必须是:
int a=0;
a |= a<<1;
System.out.println(a);
答案 2 :(得分:2)
您可以通过变量1
移动文字a
。变量a
的值为零。 1<<0 = 1
所以你刚刚翻转了你的变量。尝试颠倒变量。