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

标签 java bitwise-operators bit-shift

为什么以下两个操作在 Java 中对于 x = 3132 产生不同的结果,而对于 x=3 产生相同的结果?

int x=3;
int b = (int) Math.pow(2,x);
int c = 1<<x;

结果:

x=32: b=2147483647; c=1;
x=31: b=2147483647; c=-2147483648;
x=3:  b=8         ; c=8

最佳答案

有多个问题在起作用:

这个面试题的作用是表明 (int)Math.pow(2, x)1 << x不等于 x 的值外面0 ... 30范围。

附言可能有趣的是,使用 long代替 int (和 1L 代替 1 )会给出另一组不同于其他两个的结果。即使最终结果转换为 int 也是如此。 .

关于(int)Math.pow(2,x) 和 1<<x 的 Java 结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10416694/

相关文章:

java - 如何在Java中并行执行for-each循环中的语句?

c++ - 这是在做什么 : "input >> 4 & 0x0F"?

math - 为什么 ( x & 3 ) 与 ( x mod 4 ) 相同?

c - 为什么将变量移位超过其位宽度会清零?

c - 使用 fread 在 C 中读取 ASCII 文件

java - 增加 int 计数器的可见性

java - Android Wear Watch Face获取手机电量百分比

java - 为什么使用位移而不是 for 循环?

java - FTP/数据库连接期间删除文件失败

java - 使用位运算符 JAVA 交换 int[][] 数组中每行/列的顶部和底部 2 位