硬汉嵌入式论坛

 找回密码
 立即注册
查看: 771|回复: 3
收起左侧

[其它] 联合体+结构体

[复制链接]

36

主题

110

回帖

218

积分

高级会员

积分
218
发表于 2023-9-5 19:58:35 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <string.h>
int main()
{
        typedef union
        {
                unsigned char buf[sizeof(float)];
                struct
                {
                        float GIM;
                };
        }sys;
        sys g_sys = {0};
        printf("GIM = %f\n", g_sys.GIM);                        //GIM = 0.000000
        memset(g_sys.buf, 0xFF, sizeof(g_sys));
        printf("g_sys.buf = %d\n", g_sys.buf[0]);                //g_sys.buf = 255
        printf("GIM = %f\n", g_sys.GIM);//GIM = -nan ,GIM为什么输出为-nan啊???
       
        float b = 0xFFFFFFFF;
        printf("b = %f \n", b);                                       //b = 4294967296.000000

   return 0;
}
标红的代码,为什么会输出-nan?可以详细解释下吗!谢谢!

回复

使用道具 举报

85

主题

774

回帖

1029

积分

至尊会员

积分
1029
发表于 2023-9-5 21:26:24 | 显示全部楼层
溢出了,你看你那个b打印出来都不对,符号位为1应该是负数,就应该马上想到可能溢出了
回复

使用道具 举报

85

主题

774

回帖

1029

积分

至尊会员

积分
1029
发表于 2023-9-5 21:30:51 | 显示全部楼层
可以看一下IEEE 754相关描述,阶码全为1,尾数不全为 0,表示非数值,符号位为1,所以打印-nan
回复

使用道具 举报

36

主题

110

回帖

218

积分

高级会员

积分
218
 楼主| 发表于 2023-9-5 22:19:06 | 显示全部楼层
庄永 发表于 2023-9-5 21:30
可以看一下IEEE 754相关描述,阶码全为1,尾数不全为 0,表示非数值,符号位为1,所以打印-nan

谢谢您的解答!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-11-1 07:22 , Processed in 0.276187 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表