(int)Math.pow(2,x)和1 << x的Java结果不同

kas*_*ere 8 java bit-shift bitwise-operators

下面两个步骤:为什么产生在Java中不同的结果x = 3132但同样的结果x=3

int x=3;
int b = (int) Math.pow(2,x);
int c = 1<<x;
Run Code Online (Sandbox Code Playgroud)

结果:

x=32: b=2147483647; c=1;
x=31: b=2147483647; c=-2147483648;
x=3:  b=8         ; c=8
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 18

有多个问题在起作用:

这个面试问题的作用是表明,(int)Math.pow(2, x)并且1 << x不等于...... 范围x之外的值.030

PS或许有趣的是,使用long代替int(而1L不是代替1)将给出另一组不同于另外两组的结果.即使最终结果转换为,这也成立int.

  • 特别是最后一点非常重要. (2认同)