Java中的左位移0

时间:2013-08-02 00:22:17

标签: java bitwise-operators bit-shift

我有一个简单的问题:

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

打印“1”。为什么?我认为左移位0任意次数仍为0.哪里可以拉出1?

3 个答案:

答案 0 :(得分:10)

表达式1 << a;会将值1a次移动。

换句话说,您的值为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

所以你刚刚翻转了你的变量。尝试颠倒变量。