本文主要是介绍翁恺C语言程序设计:学习笔记6(无穷大\计算精度\char\逃逸字符\回车换行与打字机),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
-
无穷大与不存在的数1
浮点数/0
:无穷大(正负);0/0
:不存在的数;整数/0
:编译不通过,在C语言中,整数范围内是没有无穷大的,但是浮点数范围内是有无穷大的。float
有7位有效数字;a=1.345f
带有一个f
才表示float
,不然就是double
;表示相等时尽量不用
==
,因为精度问题;可以采用fabs(a-b)<1e-12,两者差的绝对值小于很小的数。 -
计算精度
当需要计算精确数据时,尽量不要用
float
,而是扩大基础的int
,比如1.23元
尽量用123分
表示,int
是精确的。 -
整数与浮点数的内部表示
整数:内部是二进制,所以两个整数可以直接做运算;
浮点数:内部是编码形式,1个bit用于表示正负,11个bit表示指数部分是多少,后面一些bit表示分数是多少,计算机内部有针对浮点的
专用硬件
(计算float和double的硬件是一样的)。float
和int
,没有特殊需要先用int
;float
和double
,没有特殊需要先用double
; -
char
char
是一种整数
,也可以看作”字符
“。每个字符在计算机内部都有一个数值表达它:
>>> char d = '1'; >>> printf("d = %d\n", d); d=49 // 字符1,在计算机内部是49
-
输入输出得到49,以”字符“输入
char c; scanf("%c", &c); printf("c=%c\n", c); printf("c=%d\n",c);
-
输入输出得到49,以”数字“输入
char c; scanf("%d", &c); printf("c=%c\n", c); printf("c=%d\n",c);
在程序内部(
49 == '1'
)成立,ASCII对应关系。 -
-
读取数据的空格
scanf("%d %c"); scanf("%d%c"); // 如果输入中包含空格,会直接把空格当作输入
-
逃逸字符
-
cmd窗口
这个窗口本身是一个程序,叫做
shell
。shell
接管了键盘、可视化,我们写的程序是在shell
里运行。不同的shell会对
控制字符\b\n...
给出不同反应。\b
:回去一个,BackSpace
。大部分shell
对于\b
的解释是返回一个,并不删除;\t
:制表位
,表示下一位,指的是行中固定的位置,并不是固定的空格大小(数量);\n
:换行;\r
:回车;回车
和换行
是源自打字机,在打字机上是两个动作。打字机上面随着打字向左边移动的称为“车”,打完一行之后需要把“车”拉回来称为“回车”;而把纸向外推一行称为“换行”。一般情况下,
shell
会把\n
直接翻译成“回车”和“换行”两个动作,虽然实际上这是两个动作。 -
C语言中的类型转换
-
自动类型转换
如果运算符两边出现不同数据类型,会自动转换成==较大(宽)==的类型。
char-->short-->int-->long-->longlong;
int-->float-->double;
-
printf
对于
printf
,任何小于int
的类型(char、short)会被转换成int
;float
会被转换成double
;对于
scanf
,则不会,要输入short
,需要%hd
。 -
强制类型转换
一般是从大强制转换成小的。只是用变量的值计算出一个新的值,但是原来的变量不变。
(类型)值
(int)10.2
:把10.2转成int类型 -
References
翁恺, C语言程序设计, [B站], 6.1.8 - 6.1.11 ↩︎
这篇关于翁恺C语言程序设计:学习笔记6(无穷大\计算精度\char\逃逸字符\回车换行与打字机)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!