kas*_*ere 8 java bit-shift bitwise-operators
下面两个步骤:为什么产生在Java中不同的结果x = 31或32但同样的结果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只能存储-2147483648和之间的值2147483647.1 << x只使用最低的五位x.因此,1 << 32根据定义是相同的1 << 0.1 << 31是消极的.Math.pow(2, 32)返回一个double.(int)(d),其中d是一个double大于2147483647返回2147483647("类型的可表示的最大值int").这个面试问题的作用是表明,(int)Math.pow(2, x)并且1 << x不等于...... 范围x之外的值.030
PS或许有趣的是,使用long代替int(而1L不是代替1)将给出另一组不同于另外两组的结果.即使最终结果转换为,这也成立int.
| 归档时间: |
|
| 查看次数: |
12175 次 |
| 最近记录: |