【问题标题】:Java bitwise operator << [duplicate]Java按位运算符<< [重复]
【发布时间】:2016-03-30 09:38:27
【问题描述】:

谁能解释一下为什么下面的位表达式会返回不同的结果:

System.out.println((-1<<31)<<1);   // it prints 0
System.out.println(-1<<32);        // it prints -1

【问题讨论】:

标签: java bit-manipulation bit-shift


【解决方案1】:

-1&lt;&lt;32 等价于-1&lt;&lt;0,即无操作。原因是移位距离(32)0x1f32 &amp; 0x1f 为0。

这是在JLS #15.19(强调我的)中定义的:

如果左侧操作数的提升类型为 int,则仅将右侧操作数的最低五位用作移位距离 .就好像右手操作数受到按位逻辑与运算符 & (§15.22.1) 的影响,掩码值为 0x1f (0b11111)。因此,实际使用的移位距离始终在 0 到 31 的范围内,包括 0 到 31。

【讨论】:

    【解决方案2】:

    移位计数值使用模32。所以第二个例子实际上与移位0相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-25
      • 2012-04-25
      • 2012-09-06
      • 1970-01-01
      • 2013-05-01
      • 2012-01-31
      • 1970-01-01
      • 2012-08-23
      相关资源
      最近更新 更多