【发布时间】:2010-12-16 02:15:35
【问题描述】:
long a = (long)Math.pow(2, 32);
// a = 4294967296 :)
long a = (int)(long)Math.pow(2, 32);
//a = 0 ?!
long a = (int)Math.pow(2, 32);
//a = 2147483647 WTF??!!!
第一个表达式很明显。 a 按原样打印。
第二个表达式有点混乱。大值是
100000000000000000000000000000000 // 1 后跟 32 个零,总共 33 位
当它被强制为int时,它是如何被为零的?它不应该将最重要的 1 作为符号位并认为该数字是 -2147483648 吗? [疑点清除]
另外,当从 Math.pow (4.294967296E9) 返回的 double 直接转换为 int 时,为什么是 2147483647?
我正在阅读一本书的类型转换和数据类型,但文本并没有解释太多。我很困惑。请解释为什么第二个和第三个表达式会产生这些结果。
【问题讨论】: