【问题标题】:Left bit shift 0 in JavaJava中的左位移0
【发布时间】: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


【解决方案1】:

表达式1 &lt;&lt; a; 会将值1a 移动次数。

换句话说,你的值是 1:

0000001

现在,您将整个内容向左移动 0 位。然后你有:

0000001

然后你有:

a |= 1 << a;

解析为:

a = 0000000 | 0000001

或者:

a = 1;

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

a |= a << 1;

【讨论】:

  • LHS 应该全是 0,不是吗?
  • @yshavit - 不关注。
  • a 为 0,所以应该是0 | 1
  • @yshavit - 哦,你说的是a |= a &lt;&lt; 1;。正确,a 为零,因此表达式解析为 a = 0 | 1;
  • 是的,抱歉我没有说得更具体——很难在 iPad 上打字。 :) 除了那个错字之外,我已经 +1 给你解释了它。
【解决方案2】:

您以错误的方式使用运算符

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

【讨论】:

    【解决方案3】:

    您将文字 1 左移了变量 a。变量a 的值为零。 1&lt;&lt;0 = 1

    所以你刚刚得到了你的变量翻转。尝试反转变量。

    【讨论】:

    • 这个答案可能更肯定。结果不应该有太多的怀疑。
    猜你喜欢
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多