printf("%o\n",2);为什么错误而 printf("%o\n",2)则正确

[复制链接]
查看11 | 回复4 | 2012-12-21 16:19:08 | 显示全部楼层 |阅读模式
sky诗人李白说得很对,printf不进行格式转换。2是一个整型字面常量,编译时一般存储在只读数据区,假定地址为p,调用printf时,将p处32位数据复制到栈中,数值为0x00000002(整数2),在执行printf时,读取前面格式%f,解析出来是要输出一个单精度浮点数,按IEEE754格式来解析这4个字节就是1.0 * 2^(-148)(即2的负148次方),格式化输出就是0.000000了%o实际上是整形输出,只是按八进制输出而已,自然正确...
回复

使用道具 举报

千问 | 2012-12-21 16:19:08 | 显示全部楼层
我在linux的gcc下面是可以输出的...
回复

使用道具 举报

千问 | 2012-12-21 16:19:08 | 显示全部楼层
试试printf("%f\n",2.0);%f是浮点型,2是整形或八进制,2.0是浮点型。...
回复

使用道具 举报

千问 | 2012-12-21 16:19:08 | 显示全部楼层
这个是因为printf()输出函数是不进行格式转换的,2是整型,而输出是要浮点型输出,整型和浮点型本身的存储空间就不相同,而按%o,八进制输出是可以的...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行