C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在C中将int打印为float大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为Little Endian使用Visual studio TC编译器.
以下是这段代码
void main()
{    
    float c = 1.0;
    int a = 0x3F800000;
    int *ptr = (int *)&c;
    printf("\n0x%X\n",*ptr);
    printf("\na = %f",a);
    printf("\nc = %f",c);
    return;    
}

输出是:

0x3F800000
a = 0.000000
c = 1.000000

浮点值1.0为0x3F800000,并在内存中存储为00 00 80 3F,适用于Little Endian.
将相同的值分配给int a. printf如何打印0.000000一段时间1.000000 for float c?我已经看到它在printf中使用%f打印时将所有整数值打印为0.000000.

另外,由于printf是可变参数函数,它如何知道寄存器中传递的值是int还是float?

解决方法

我的通灵能力告诉我,Adam Liss的评论是正确答案:浮动参数被提升为double,因此printf()函数期望发生这种情况:它期望堆栈上的64位值,但是获得32位加垃圾数据碰巧是零.

如果增加显示精度,则显示应类似于= 0.00000000001.

这也意味着这应该工作:

void main()
{    
    double c = 1.0;
    long long a = 0x3FF0000000000000;
    long long *ptr = (long long *)&c;
    printf("\n0x%llX\n",c);
    return;    
}

大佬总结

以上是大佬教程为你收集整理的在C中将int打印为float全部内容,希望文章能够帮你解决在C中将int打印为float所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。