今天在豆瓣的小组上看到一个问题,大概和 stackoverflow 上面这个问题类似。
问题描述:
使用 %d
打印 double 类型的值,C 语言是怎么把值转成十进制的数的。
代码如下:
int main()
{
float a = 3.3f;
int b = 2;
printf("%d", a * b);
}
运行结果是 1610612736
,和 stackoverflow 上面题主的运行结果一样,
我的运行环境是:Windows10 ,mingw gcc version 11.3.0 。
对于上面的代码,我知道 a 和 b 相乘时,int 类型的 b 会被转换成 float 类型,然后在 printf 函数里面,其相乘的结果又会被转成 double ,然后最终被打印的时候其长度又会被截掉一半。我理解正确的用法是使用 %d
或 %ld
,可是在使用 %d
这个错误用法的情况下,结果值 1610612736
是怎么得到的呢?
求一个解答。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.