Java中的左位移0

Riz*_*Riz 4 java bit-shift bitwise-operators

我有一个简单的问题:

   int a = 0;
   a |= 1<<a;
   System.out.println(a); 
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*sen 11

表达式1 << a;将移动值1,a次数.

换句话说,您的值为1:

0000001
Run Code Online (Sandbox Code Playgroud)

现在,你将整个事物向左移动0位.然后你有:

0000001
Run Code Online (Sandbox Code Playgroud)

然后你有:

a |= 1 << a;
Run Code Online (Sandbox Code Playgroud)

哪个解决方案:

a = 0000000 | 0000001
Run Code Online (Sandbox Code Playgroud)

要么:

a = 1;
Run Code Online (Sandbox Code Playgroud)

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

a |= a << 1;
Run Code Online (Sandbox Code Playgroud)