鱼C论坛

 找回密码
 立即注册
查看: 2830|回复: 4

格式输入输出

[复制链接]
发表于 2011-12-21 22:26:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
float b=123.1234567;
double c=12345678.123456789;
printf("b=%f,%lf,%5.4lf\n",b,b,b);
printf("c=%f,%lf,%8.4lf\n",c,c,c);
结果:
b=123.123459,123.123459,123.1235
c=12345678.123457,12345678.123457,12345678.1235
详细解说下,谢谢各位了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-22 09:17:35 | 显示全部楼层
float占4个字节再内存中按IEEE4字节存储  
第一个printf中的  %f 就是普通的浮点型显示 浮点型的精度是6-7位 (所以在数据传输中都化为整形来传输)  %f一般显示的是6位小数点 但是后面的值不是精确的 所以就显示了123.123459   %lf虽然是双精度的浮点型显示 但是存在内存中的数据是123.123459 所以显示的是该数 最后面的那个%5.4的话表示宽度5小数位4位 小数位肯定要为4位 如果宽度小于实际的宽度(就像这道题) 那么就忽略 如果宽度大于实际的宽度 在前面多余的宽度以空格代替(在显示的时候很容易的分辨) 如果前面加上‘-’那么表示顶格显示
第二个printf是double类型的数据在内存中存储为8位精度有16位 第一个%f就是普通浮点数显示 小数位6位 第二个%lf  在VC6.0中和%f效果一样的  后面的%8.4lf 就是小数点和宽度的问题

最主要分清楚一个数在内存中的存储方式  比方说一个数有几十个小数位 那么这个数肯定失真的 内存根本存不了 显示的格式小数位优先


小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-22 09:17:57 | 显示全部楼层
1.        IEEE4字节浮点数编码简介
4字节共32位
00-22位     尾数(1.尾数)
23-30位     阶码(2^( 阶码 - 127))
31位          符号(0正;1负)
值=(符号)[(1.尾数)*(2^(阶码 - 127))]

2.        举例说明
1、读取数据:08 03 00 C0 00 02 C4 AE[偏移192,长度2字]
2、收取数据:08 03 04 00 00 40 88 52 95[数据00004088,长度04]
3、分析数据:00 00 40 88[FF1 FF2 FF3 FF4]
A、前后字交换顺序40 88 00 00[FF3 FF4 FF1 FF2]
        二进制:0100 0000 1000 1000 0000 0000 0000 0000
    B、尾数 =  000 1000 0000 0000 0000 0000 B = 0.0625;
                阶码 =  10000001B - 127 = 129 - 127 = 2 ;
                符号 =  (+) ;
C、计算数值:+[1.0625 * 2^2] = 4.25


小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-12-24 22:32:04 | 显示全部楼层
谢谢你,讲解的很详细,我明白了:P
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-25 20:35:26 | 显示全部楼层
二楼的数据类型学的不错
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-10 08:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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