作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
为什么以下代码的行为与在 C 中的行为相同?
float x = 2147483647; //2^31
printf("%f\n", x); //Outputs 2147483648
这是我的思考过程:
2147483647 = 0 1001 1101 1111 1111 1111 1111 1111 111
(0.11111111111111111111111)base2 = (1-(0.5)^23)base10
=> (1.11111111111111111111111)base2 = (1 + 1-(0.5)^23)base10 = (1.99999988)base10
因此,要将 IEEE 754 表示法转换回十进制:1.99999988 * 2^30 = 2147483520
那么从技术上讲,C 程序必须打印出 2147483520,对吧?
最佳答案
要表示的值将是 2147483647。接下来可以用这种方式表示的两个值是 2147483520 和 2147483648。
由于后者更接近无法表示的“理想值”,因此它被使用:在 float 中,值会四舍五入,而不是被截断。
关于c - IEEE 754 : How exactly does it work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7005862/
我是一名优秀的程序员,十分优秀!