c - 联合与价值
问题描述
#include<stdio.h>
typedef union{
char a;
double num;
}uni;
int main(){
uni name;
name.num=5.8234;
printf("%lf\n",name.num);
name.a='b';
printf("%lf %c\n",name.num,name.a);
printf("\n");
}
为什么双数值保持不变?
输出:
5.823400
5.823400 b
解决方案
假设您的系统对 a 使用 IEEE754 双精度浮点格式double
,则表示num
包含 1 个符号位,后跟 11 位代表指数,后跟 52 位代表尾数。还假设您的系统使用 little-endian 字节排序,char
联合double
中a
的
您看不到区别,因为%f
默认情况下仅显示 6 个十进制数字,而double
具有此表示的 a 具有大约 16 个有效十进制数字。
如果您将格式说明符更改为,%.16f
您将看到不同之处。
5.8234000000000004
5.8234000000000794 b
推荐阅读
- php - PHP检测字符串中的多个连续特殊字符
- keras - 将 gcloud 任务提交到 google cloud ML 引擎时出错
- adobe - SAP 交互式表单归档
- javascript - 如何正确代理对 prod 中 /api/ressource 的请求?
- python - 将 X、Y、Z 列表缩减为 X、Y 列表并检索 XY PTS 的最小和最大 X
- vba - 排除循环中的第 14 列
- sql - 嵌套插入和选择语句
- react-native - 如何使用 nodemailer 在 React Native 中发送电子邮件?
- pip - devstack 失败,错误标记'python_version ==“3.4”'与您的环境不匹配
- html - HTML5 页面结构:部分和文章正确放置