以前学习于渊老师的《自己动手写操作系统》一书的时候,也自己实现过printf,不过那是比较简单的版本。最近看《程序员面试宝典》,做到这么一道题目:
#include <stdio.h>
int main{
    printf("%f",5);
    printf("%d",5.01);
}

问题是输出什么?
题目不难但很细节:第一个输出0.000000,因为printf函数遇到%f,认为参数是个double类型(printf函数中float自动转为double),而5是个int型,只有四位,那么输出取8位发生越界,输出0.000000,第二个输出是只取四位,输出一个较大的数。

于是我想:printf("%f %d",5,5.01);会是什么呢

事实上输出两个都是大数,只不过第一个输出浮点数后面有很多0,第二个输出则和前面的第二个输出一样

个人观点分析其原因:

首先栈是向下生长的,而printf函数(其实是所有函数)参数入栈都是从右往左的,那么5.01先入栈,5再入,也就是5.01在高地址,5在低地址,输出%f的时候,取5所占的全部位和5.01的低四字节,输出一个大数,输出%d取高字节,也输出一个大数。http://hovertree.com/menu/c/
为了直观地看出这种分析:
我们用下面语句做测试:

printf("%f  %d",5,120.5);

其中:120.5的存储格式如下:

0 100 0000 0101 1110 0010 0000 0000  0000     0000 0000 0000 0000 0000 0000 0000 0000
低4字节全是0,高4字节是个大数,
所以输出应该是0.000000和一个大数
实际输出如下:

推荐:http://www.cnblogs.com/roucheng/p/cfenge.html

printf的题目的更多相关文章

  1. hdu 畅通工程系列题目

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 并查集水. #include <stdio.h> #include <iost ...

  2. 关押罪犯 and 食物链(并查集)

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...

  3. C语言100道经典算法

    经典的100个c算法 C语言的学习要从基础,100个经典的算法真不知道关于语言的应该发在那里,所以就在这里发了,发贴的原因有2个,第一个,这东西非常值得学习,第二个,想..........嘿嘿,大家应 ...

  4. C语言100个经典算法

    POJ上做做ACM的题 语言的学习基础,100个经典的算法C语言的学习要从基础开始,这里是100个经典的算法-1C语言的学习要从基础开始,这里是100个经典的算法 题目:古典问题:有一对兔子,从出生后 ...

  5. 2010noip提高组解题报告

    https://www.luogu.org/problem/show?pid=1514 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个 ...

  6. 【ACM/ICPC2013】树形动态规划专题

    前言:按照计划,昨天应该是完成树形DP7题和二分图.最大流基础专题,但是由于我智商实在拙计,一直在理解树形DP的思想,所以第二个专题只能顺延到今天了.但是昨天把树形DP弄了个5成懂我是很高兴的!下面我 ...

  7. c-大量经典的c算法---ShinePans

    经典的100个c算法 算法  题目:古典问题:有一对兔子.从出生后第3个月起每一个月都生一对兔子.小兔 子长到第三个月后每一个月又生一对兔子,假如兔子都不死,问每一个月的兔子总数 为多少? _____ ...

  8. C语言第一次博客作业---顺序机构基础练习

    一.PTA实验作业 题目1.温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代 ...

  9. C语言第01次作业--顺序、分支结构

    1.本章学习总结 1.1 思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 本周我学到了很多C语言中基础的结构和语法(见思维导图),能对一些生活中的简单问题对应编写程序解决一些这些简单 ...

随机推荐

  1. vpn establish capability from a remote deskstop is disabled错误的解决办法

    使用Cisco的VPN时,有时候会提示vpn establish capability from a remote deskstop is disabled.这样的错误,解决办法就是重启本机的Remo ...

  2. Java连接Oracle数据库开发银行管理系统【二、设计篇】

    一.总体分析     此系统的实现并不难,但是如何更好的设计出实现方式还是需要更深入的分析,例如:如果再增加其他功能,是不是需要变动的 代码很少,只是直接再增加一点功能就可以了呢?如果使用的不是Ora ...

  3. redis常用命令、常见错误、配置技巧等分享

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/117.html?1455860236 1. redis查看当前所有的key ...

  4. Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明)

    Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明) v5  增加对sql单引号的内部支持.可以作为string 结构调整,使用递归法重构循环发..放弃循环发. V4 java dsl词 ...

  5. 程序员藏经阁 Linux兵书

    程序员藏经阁 Linux兵书 刘丽霞 杨宇 编   ISBN 978-7-121-21992-4 2014年1月出版 定价:79.00元 536页 16开 内容提要 <Linux兵书>由浅 ...

  6. css3使用box-sizing布局

    css3增添了盒模型box-sizing,属性值有下面三个: content-box:默认值,让元素维持W3C的标准盒模型.元素的宽度/高度(width/height)(所占空间)等于元素边框宽度(b ...

  7. 2.Redis常用命令

    setget 匹配Keykeys *keys na*keys na?e 判断指定的Key是否存在exists key 删除一个或者多个keydel key//删除一个del key1 key2//删除 ...

  8. static、const和static const

    http://blog.csdn.net/rainkin1993/article/details/8068558 #include<iostream> using namespace st ...

  9. 新浪微博SDK开发(1):总述

    花了几天时间,消耗了九牛六虎之力,新浪微博大部分API已经封装,但有部分API实在太难封装. 说起这封装,我必须严重地.从人品和技术层面鄙视一下新浪的程序员,实在太菜了.估计菜鸟都被大企业吸收了,菜到 ...

  10. PHP的学习--生成器Generators

    生成器总览 (PHP 5 >= 5.5.0, PHP 7) 生成器提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低. 生成器允 ...