专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C语言

C 有关问题

发布时间:2011-06-28 14:48:34 文章来源:www.iduyao.cn 采编人员:星星草
C 问题
int main()
{
double k,x;
  scanf("%lf",&x);
  k=sqrt(x);
  printf("%d %lf",k,k);
  return 0;} 输入16 为什么输出结果为 
0 0.000000

------解决方案--------------------
k不是int类型~ 不要用%d 


------解决方案--------------------
查看下printf是如何实现就明白了!如果把%lf放在前面就不会被转换。。。
------解决方案--------------------
从d到int类型,没有强制转化,这种行为没有定义
------解决方案--------------------
浮点类型的存储方式和整型的不同. 

浮点型存储分为小数部分和指数部分. 

而整型存储的只有整数部分.

浮点型一般比整型占的字节数要多, 如果不按格式读取, 可能发生截断读取或者越过范围读取. 就是垃圾值了. 有的编译器会给 0 .

C/C++ code
/* 忘了在哪本书看过这个解释, 记得不知道是否严谨, 有错误的话, 楼下指正 */

------解决方案--------------------
k是double型的数据在内存中存储方式以科学计数法表示1*2^2具体存储方式如下:
double型数据占64位内存空间其中第63位为符号位(从0开始计算内存空间)62到52为介码 51到0表示尾数
如k:^2表示介码1表示尾数符号位为1;
则有:
00000000 低
00000000
00000000
00000000
00000000
00000000
10000000
01000000 高
浮点数存储方式参考http://www.cnblogs.com/dolphin0520/archive/2011/10/02/2198280.html
你在输出的使用用了%d,是int型的输出int只能占16位经过转换只将double低地址保留下来了其余的则丢失了。

------解决方案--------------------
探讨
引用:
k不是int类型~ 不要用%d
%d为什么会是这个结果 这是我想问的

------解决方案--------------------
类型转换,找本书详细的看看
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: