分享到:
发表于 2008-12-18 09:18:38 楼主 | |
如题,我想 float x=2.0f; printf("%f",x)这样是输出浮点数的10进制表示形式,能否输出它的16进制内存表示呢?要求: 不能int *pi=&x,然后再printf("%d",*pi)输出,有没有Printf的参数写法能直接输出这个浮点数的,16进制存储信息(是浮点数的内容不是地址)。请指教,10分感谢! |
|
楼主热贴 |
发表于 2008-12-18 09:18:38 5楼 | |
不能直接取内存中的内容就得自己按照浮点数拼出内存的内容。按照浮点数表示法,自己写代码拼出来吧。不过设计到数学问题。 IEEE浮点数表示法 http://breakman.bokee.com/4651836.html |
|
个性签名:
|
发表于 2008-12-18 09:18:38 4楼 | |
我的要求是打印16进制的float存储内容,不是打印到字符串里面,谢谢。 ... ... |
|
发表于 2008-12-18 09:18:38 3楼 | |
是的,这是我的要求... ... |
|
发表于 2008-12-18 09:18:38 2楼 | |
控制浮点数打印格式 浮点数的打印和格式控制是sprintf 的又一大常用功能,浮点数使用格式符"%f"控制,默认保留小数点后6 位数字,比如: sprintf(s, "%f", 3.1415926); //产生"3.141593" 但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:"%m.nf"格式,其中m 表示打印的宽度,n 表示小数点后的位数。比如: sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142" sprintf(s, "%-10.3f", 3.1415626); //产生:"3.142 " sprintf(s, "%.3f", 3.1415626); //不指定总宽度,产生:"3.142"注意一个问题,你猜 int i = 100; sprintf(s, "%.2f", i); 会打出什么东东来?"100.00"?对吗?自己试试就知道了,同时也试试下面这个: sprintf(s, "%.2f", (double)i); 第 一个打出来的肯定不是正确结果,原因跟前面提到的一样,参数压栈时调用者并不知道跟i相对应的格式控制符是个"%f"。而函数执行时函数本身则并不知道当 年被压入栈里的是个整数,于是可怜的保存整数i 的那4 个字节就被不由分说地强行作为浮点数格式来解释了,整个乱套了。不过,如果有人有兴趣使用手工编码一个浮点数,那么倒可以使用这种方法来检验一下你手工编 排的结果是否正确。http://blog.chinaunix.net/u1/56078/showart_442252.html |
|
发表于 2008-12-18 09:18:38 1楼 | |
楼住是说不能 printf("%x", *(int *)&x);只能使用x, f之类的参数? |
|
个性签名:
|
针对ZOL星空(中国)您有任何使用问题和建议 您可以 联系星空(中国)管理员 、 查看帮助 或 给我提意见