首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求圣人解释一下

2014-01-06 
求高人解释一下代码:[解决办法]%x对应的是整数[解决办法]哥,建议你先去看看《深入理解计算机系统》的前几章。

求高人解释一下
代码:



[解决办法]
%x  对应的是整数
[解决办法]
哥,建议你先去看看《深入理解计算机系统》的前几章。

里面讲述了浮点数是如何存储的。
要用计算机的思维去写程序。
[解决办法]
printf是以压栈的形式处理参数的,并且把它压进去的时候float转换成double
看这里的1,2,3,5楼,,解释的很详细,说简单了就是把double截断了
贴个测试代码,但是与lz的问题相似

无关紧要,一起思考,我估计是不是printf本身就有问题


每一次运行,都是同样的结果吗?还是地址都是变化的?

函数参数传递的时候,因为传递的是值,只是简单把值复制过去了。
也就是说,在printf函数内部,a和b的存储位置,都是新的(临时变量)地址。


也不对,printf变参函数,在访问argv时候,都是地址访问的。不会开辟新的空间。
等高人给权威回复吧
[解决办法]
好像很深奥的样子,受用了
[解决办法]

你的程序输出的根本就不是a,b变量的值
测试一下这个代码,看看和你的一样不

无关紧要,一起思考,我估计是不是printf本身就有问题

写这些函数的那帮人不会让我们这种等级的人抓住把柄的求圣人解释一下
[解决办法]
printf的可变参数列表用第一个字符串的内容去解析栈中的数据
因为float自动转换成double,因此两个%X总共解析的8字节的栈顶数据,实际上属于一个double变量
因为是从右向左压栈,所以printf("%08X\n\n%08X\n\n",b,a);和printf("%08X\n\n%08X\n\n",b);是一样的,反之同理
[解决办法]
printf("%08X\n\n%08X\n\n",b,a);
在这个printf里,第一个%x取到变量b的低地址4个字节(因为按int取),第二个%x取到b的后面的四个字节,
这时就结束了,和变量a没有任何关系


[解决办法]
http://www.cnblogs.com/elitegoblin/archive/2013/06/07/3123964.html

LZ可以看看这篇帖子的最后一段,简单说来就是对于一般的函数,参数都是有明确类型声明的,那么传进去的参数都会按照参数声明的转换,但对于printf,他后面的参数的类型是不定的,所以编译器的做法就是对你所传入的参数先进行类型提升后再传入函数。具体说来就是char,short,int都变成int,float,double都变成double,这也是为什么%f能同时处理float和double的原因,因为传进去的参数都会自动变成double

热点排行