以下代码在C语言中为什么会出现这样的行为?
因此,要将IEEE 754的表示法转换回十进制:
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,对吗?