gpt4 book ai didi

c++ - 由 float : completely insane output 组成的 union 体

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:28 28 4
gpt4 key购买 nike

#include <stdio.h>

union NumericType
{
float value;
int intvalue;
}Values;

int main()
{
Values.value = 1094795585.00;
printf("%f \n",Values.value);
return 0;
}

这个程序输出为:

1094795648.000000 

谁能解释为什么会这样?为什么 float Values.value 的值增加了?或者我在这里遗漏了什么?

最佳答案

首先,这与 union 的使用没有任何关系。

现在,假设你写:

int x = 1.5;
printf("%d\n", x);

会发生什么? 1.5 不是整数值,因此它被转换 为整数(通过截断)和 x 因此实际上得到值 1 ,这正是打印的内容。

您的示例中发生了完全相同的事情。

float x = 1094795585.0;
printf("%f\n", x);

1094795585.0 无法表示为单精度 float ,因此它被转换 为可表示的值。这是通过舍入发生的。最接近的两个值是:

1094795520 (0x41414100) -- closest `float` smaller than your number
1094795585 (0x41414141) -- your number
1094795648 (0x41414180) -- closest `float` larger than your number

因为您的数字稍微接近较大的值(如果您查看十六进制表示,这会更容易看出),它四舍五入到那个值,所以这就是存储在 x 中的值,这就是打印的值。

关于c++ - 由 float : completely insane output 组成的 union 体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3418922/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com