1. 计算机把浮点数分成小数部分和指数部分来表示,并且分开存储这两部分。
2. 一般而言,存储一个int要占用一个机器字长。
3. 声明变量时,只为变量分配内存空间,并不做初始化操作。(局部变量)
4. 利用printf打印数据时,转义符的个数要和后面的参数个数匹配。
5. C语言中,0x或0X前缀表示十六进制值。0前缀表示八进制值。
6. 不同的进制使用不同的转换说明。十进制使用%d,八进制使用%o,十六进制使用%x,另外,要显示各进制数的前缀0、0x、0X,必须分别使用%#o,%#x,%#X。
7. C语言提供3个附属关键字修饰基本整数类型:short、long、unsigned。short int类型(或简写为short)占用的空间可能比int类型少,short是有符号类型。long int或long占用的空间可能比int多,long也是有符号类型。long long int或long long(C99标准加入),占用的空间可能比long多,该类型至少占64位。Long long也是有符号类型。Unsigned int或unsigned只用于非负数的场合。
8. 在C90标准中,添加了unsigned long int或unsigned long和unsigned short int或unsigned short。C99标准又添加了unsigned long long int 或unsigned long long。
9. C语言为了适应不同的机器,只规定了short占用的空间不能多于int,long占用的空间不能少于int。
10. Unsigned或unsigned int常用于计数。
11. 如果在long类型和int类型占用空间相同的机器上编写代码,当确实需要32位的整数时,应使用long而不是int,以便把程序移植到16位机上时,也能正常工作。在int设置为32位的系统中要使用16位的值,应使用short类型以节省空间。使用short类型的另一个原因是,计算机中某些组件使用的硬件寄存器是16位。
12. 通常,代码中使用的数值,都被存储为int类型。如果一个数值超过int的范围,编译器会将其视为long int。如果数字超过了long int的范围,编译器则将其视为unsigned long。如果还不够大,则将其视为long long或者unsigned long long。
13. 八进制或十六进制常量被视为int类型,如果值太大,编译器尝试将它们视为unsigned int,如果还不够,编译器会依次使用long、unsigned long、long long、unsigned long long。
14. 要将一个较小的数字常量作为long类型看待,可以在值的末尾加上l或者L。当成long long类型看到,可以在后面加ll或者LL。另外,u或者U后缀表示unsigned long long。如5ull、6LLU。
15. 当达到它能表示的最大值时,会重新从起始点开始。Unsigned int类型的变量从0开始。而int类型的变量从-2147483648开始。
16. 溢出行为属于未定义行为,C标准并未定义有符号类型的溢出规则。
17. 打印unsigned int类型的值,使用%u转换说明。打印long类型的值,使用%ld转换说明。在x或o前面可以使用l前缀,分别表示以十六进制数表示long类型整数和以八进制数表示long类型整数。
18. 对于short类型,可以使用h前缀,%hd表示以十进制显示short类型整数。%ho表示以八进制数表示short整数。另外h和l前缀都可以和u一起使用,表示无符号类型。
19. 对于short类型的整数,无论以%hd还是%d打印,值都是一样的,因为在给函数传递参数的时候,C编译器将short类型的值自动转化为int类型的值。因为int类型被认为时计算机处理整型数时最高效的类型。
20. 标准的ASCII码的范围是0-127,只需7位二进制数表示即可。许多其他系统还提供扩展ASCII码,也在8位的表示范围之内。一般而言,C语言会保证char类型足够大,以存储系统的基本字符集。
21. 许多字符集都超过127,甚至多于255。如日本汉字(kanji)字符集。商用的unicode创建了一个能表示世界范围内多种字符集的系统,目前包含的字符超过110000个。
22. C语言将1字节定义为char类型占用的位数,因此无论16位系统还是32位系统,都可以使用char类型。
23. C语言中,使用单引号括起来的单个字符被称为字符常量。实际上,字符以数字形式存储,所以也可以使用数字来对字符变量赋值。
24. 字符常量具有一个特性,将一个字符常量’ASDF’赋值给一个char类型变量,那么只有最后8位是有效的,即char类型变量里面保存的是’F’。
25. 表示ASCII码中的非打印字符时,可以使用对应的码值或者使用转移字符。
26. C标准规定报警字符不得改变活跃位置。标准中的活跃位置指的是显示设备中下一个字符即将出现的位置,也即光标位置就是活跃位置。
27. 从C90开始,不仅可以使用八进制、十进制形式表示字符常量,还可以使用16进制形式来表示字符常量。比如,Ctrl+P字符的ASCII码十六进制码为10,可表示为‘\x10’或‘\x010’。
28. 有些编译器将char实现为有符号类型,而有的编译器又将char实现为无符号类型。在C90标准中,允许在char的前面使用unsigned 或signed。这样,无论编译器默认char是什么类型都不要紧了。
29. C99中,添加了_Bool类型,用于表示布尔值,即true和false。C语言中,用1表示true,0表示false,所以_Bool类型实际上也是一种整数类型。
30. C语言提供了许多的整数类型,但某些类型名在不同系统中的功能不一样,C99增加了两个头文件stdint.h和inttypes.h,以确保C语言的类型在各个系统中的功能一致。
31. 精确宽度整数类型、最小宽度类型、最快最小宽度类型、
32. C标准规定,float类型必须至少能表示6位有效数字,且取值范围至少是10E-37到10E37。通常,系统存储一个浮点数需要32位,其中8位用于表示指数的值和符号,剩下的24位表示非指数部分及其符号。
33. Double类型和float类型的最小取值范围相同,但至少必须能表示10位有效数字。C语言的第三种浮点类型为long double,C语言只保证long double类型至少与double类型的精度相同。
34. 代码中,有多种形式书写浮点数,浮点型常量的基本形式:有符号的数字(包括小数点),后面紧跟e或者E,最后是一个有符号数字表示10的指数。浮点数可以没有小数点或者指数部分,但是不能两者同时省略。
35. 默认情况下,编译器假定浮点型常量是double类型的精度。在浮点数后面加f或F后缀,可以覆盖默认设置。使用l或L后缀,使得数字变成long double。
36. C99标准中,添加一种新的浮点型常量格式,用十六进制表示浮点型常量。即在十六进制数前加上十六进制前缀(0x或者0X),用p或者P代替e或者E,用2的幂代替10的幂(p计数法)。比如0xa.1fp10表示的值是(10 + 1/16 + 15/256)* 1024。需要说明的是,并非所有的编译器都支持C99的这一特性。
37. 使用%f转换说明打印十进制计数法的float或者double,用%e打印指数计数法的浮点数。如果系统支持十六进制格式的浮点数,可用a和A分别代替e和E。打印long double类型使用%Lf、%Le或者%La。
38. 当计算导致数字超过当前浮点型能表示的最大值,就会发生上溢,这种行为在过去是未定义的,但现在C语言规定,这种情况下,会赋予一个表示无穷大的特定值。
39. 假设一个数字是float类型能用全部精度 表示的最小的数,现在将它除以2,这时候指数会减少,但如果指数已经是最小值的时候,计算机只能将尾数部分的位向右移,此时,虽然得到结果,但是却损失了原有末尾的有效数字,这种情况叫下溢,C语言将损失了类型全精度的浮点值称为低于正常的浮点值。目前,C库已经提供了用于检查计算是否会产生低于正常值的函数。
40. 另一个特殊的浮点值为NaN(not a number)。比如给asin()函数传递一个值,该函数返回一个角度值。但是正弦值不能超过1,如果传入大于1的数,该函数的行为是未定义,这时,函数返回一个NaN值。
41. C99标准支持复数类型和虚数类型,但是有所保留。一般而言,复数类型都是可选项。C11标准将整个复数软件包作为可选项。
42. C语言有3种复数类型:float_Complex、double_Complex、long double_Complex。每个复数变量包括两个基本类型的值,分别表示复数的实部和虚部。C语言的3种虚数类型:float_Imaginary、double_Imaginary和long double_Imaginary。如果包含complex.h头文件,便可用complex代替_Complex,用imaginary代替_Imaginary。还可用I代替-1的平方根。
43. Sizeof是C语言的内置运算符,以字节为单位给出指定类型的大小。C99和C11提供%zd转换说明来匹配sizeof的返回类型。一些不支持C99和C11的编译器可用%u或%lu来代替%zd。
44. C语言定义了char类型是1个字节。而在char为16位、double类型为64位的系统中,sizeof给出的double是4字节。
45. C语言规定,当缓冲区满、遇到换行字符、或者需要输入的时候,此时会刷新缓冲区。另一种刷新缓冲区的方法是使用fflush()函数。
46. C语言允许混合数据类型的表达式,但是会进行自动类型转换。以便实际运算时统一使用一种类型。