我是靠谱客的博主 孤独方盒,最近开发中收集的这篇文章主要介绍C语言的浮点类型及数据的相互转化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C语言中有float 和double 两种不同的 浮点类型,分别对应 IEEE(电气电子工程师学会)754单精度格式和双精度格式,相应的十进制有效数字分别为 7 位和 17位左右。

各种数据相互转化时,满足:

1、 当int转化为 float 时不会发生溢出,但有效数字可能被舍去(int 的32位都用来表示数,但是float 只用了24位来表示尾数);
2、 int 或float 转化为 double 时,因为double 的有效位数更多,故能保留到精确值。
3、 从double 转化为 float 时因为 float的 范围更小,故可能发生溢出,此外,由于有效位数变少,更可能被舍入;
4、 从float或double 转化为 int 因为 int 没有小数部分,所以数据可能会向 0 的方向被截断。

int i , float f ,double d;

i==(int)(float)i; false;

f==(float)(int)f; false;

i==(int)(double) i; true;

f==(float)(double)f; true;

d==(float)d ;true;

f== -(- f); true;

(d+f)- d==f ; false;

值得分析的是最后一个,例如当 d=1.79* 10的308次方, f=1.0 时,因为d+f 时需要d 和 f 的阶数相同,因此需要对 f 的尾数进行向右移位,但可怜的float 尾数位只有24位,强大的double却有53 位,再怎么移位也不可能使其拥有相同的阶数,最后float被舍去而变为0,因此 左右不相同,故为false。

在这里插入图片描述

最后

以上就是孤独方盒为你收集整理的C语言的浮点类型及数据的相互转化的全部内容,希望文章能够帮你解决C语言的浮点类型及数据的相互转化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部