作者:黄昏的日出

大喊:“C语言!I love you three thousand!”

C语言框架

【01】写在前前前…面

【02】究竟什么是C?

【03】你的第一个C程序

【04】了解变量

【04.1】数字化基础

【04.2】数据保存

【04.3】类型转换&浮点数

【04.3】类型转换&浮点数

一、类型转换

1.自动类型转换:当运算符(常见+、-、*、/、%)两边出现不一致的类型时,编译器会自动转换成较大的(范围更大)类型。

从小到大:char-short-int-long-long long; int-float-double(整型转换成浮点型

2.但是特别的对于“printf ”,任何小于int的类型都会被转换成int;float会被转换成double。但是“scanf ”却不会,需要严格的格式字符串。如果要输入short,就需要%hd(因为需要明确的在内存中的大小,便于分配空间)。

3.强制类型转换

(1)格式:“(类型)值”。

int a;a=(double)2.0;

(2)注意安全性:大的不要转换成小的!(防止在内存中溢出,损失精度)

通常是转换成较大的类型时使用.

4.强制类型转换的优先级比四则运算还高!!

二、浮点数(float&double)

1. 浮点范围

(1)inf——表示超过规定范围的浮点数:表示无穷【+无穷 &-无穷】
(2)nan——表示不存在的浮点数,比如说0/0

2. 精度浮点数

(1)float类型只有7位有效数字,在不规定小数位数的情况下,它的精度是不太准确的。

(2)从键盘输入的带有小数点的字面量编译器是默认double类型,而不是float类型。如果一定要要用float类型的数据,所就要用f、F作为后缀来表明数据类型。

现在编程大多数人都会选择用double,而不是float。因为double精度更高,不容易出现错误。之所以会有float存在是因为以前的计算机内存都比较小,程序员都会尽可能的节省空间。现在的计算机内存都相当大,所以内存空间这个基本不成问题!

*这里突然想到之前在讲变量的时候遗忘了一点,补充一下:打开界面后,编写代码的过程中定义的所有变量、结构等等都是临时存储在内存空间里面的,一旦关闭程序,内存空间就会被被释放。

(3)两个浮点数,如果直接用==来判断是可能失败的,要用fabs(F1-F2)<1e-12/1e-8;

fabs()是里的函数,表示求取绝对值。

1e-12用于表示比较的精度。

(4)最好不要在做计算的时候多次使用浮点型数据,它的误差会不断的累加。最好的办法就是通过倍率,化为整型变量。比如说1.23元,就将其表示为123分,以减少计算误差。
(5)浮点数的内部表达:


(6)选择浮点类型:没有特殊要求,尽量只使用double。(甚至还有long double)

3. 浮点类型

(1)在靠近0的附近很小一片区域(想象无限靠近),使用float和double都无法表示;但是0和无穷大还是可以表示。

(2)输入和输出:%f就是正常输出;%e或者%E会输出科学计数法形式的数据。

(3)对于浮点型的数据,在计算机的内存里面只保留有固定的某些数据,在相邻的两个数据之间有无穷多个数,在使用计算机输入或者输出数据的时候,就找相邻最接近的数来表示。

比如说,我本意想要输出的数据是0.0048,但是计算机内存里面只有0.004和0.005,那么就用0.005来近似表达0.0048。这也可以合理的解释为什么double的精度会比float高——在内存中,相邻两个数之间的距离,double小于float,能精确表示的范围更大。

小结:

在昨天的基础上又补充了一些知识,尤其是浮点数。之后还会补充没有补充完整的相关内容。

今天又是努力学习的一天!

写在最后:

新晋程序猿,记录学习历程。现已有C++,C#,Python以及java系列笔记(大学老师授课以及B站上翁恺老师的讲解),本着复习、记录以及传递知识的初心,将在较长一段时间内持续将笔记更新到CSDN上。

欢迎点赞​、收藏​、留言​哦~

如有错误,烦请多多批评指正!

码字不易,鼓励鼓励!