1.C的数据关键字
1.K&R标准
int
基本的整数类型.
long
short
unsigned
用于提供基本类型的变种.
char
表示字母及其他字符,也可以表示小的整数.
float
double
表示带小数点的整数.
2.C90
signed
void
3.C99
_Bool
表示布尔值.
_Complex
表示复数.
_Imaginary
表示虚数.
以上类型按在计算机中的存储方式被划分为两个系列,整数(integer)和浮点数(floating-point).
2.位,字节,字:
1.位,bit计算机存储的基本单位.
2.字节,byte,几乎对所有的机器,一个字节均为8位.可表示0~255.字节的标准定义.
3.字,word.对于一种给定的计算机设计,字是自然地存储单位,不同机器字的大小不同,8~64位不等.
3.整数类型与浮点数类型的存储方式.
1.整数 integer - 没有小数部分的数.
2.浮点数 float-point 可以和数学中的实数(real number)概念相对应,实数包含了整数之间的那些数.
3.16E7 = 3.16 x 10的7次方..浮点数与整数的存储方案不同.浮点数表示法将一个数分为小数部分和指数部分分别存储,如存储3.1415926.
3.总结:
1.某些算数运算,使用浮点数会损失更多精度.
2.任何区间内存在无穷多个实数,所以计算机浮点数不能表示区域内所有的值,浮点数往往是实际值的近似.如:7.0可能以6.99999 存储.
4.C数据类型
1.整数类型
C的各种整数类型的区别在于所提供数值的范围,以及数值是否可以取负值.
1.int 有符号整数,int类型的值必须是证书,可以正,负或0.取值范围依赖于计算机系统.
2.int 类型存储在计算机的一个字(word)中.
3.初始化(initialize)int dogs = 32;
4.打印:%d指定证书在行中的打印位置,%d为格式说明符(format specifier)
+-------- 进制 --------+--- 缩写 ---+--- 前缀 ---+--- 占位符 ---+--- C语言风格 ---+
| 十进制 | dec | | %d | %#d |
|-----------------------------------------------------------------------------------------------|
| 八进制 | octal | 0 | %o | %#o |
|-----------------------------------------------------------------------------------------------|
| 十六进制 | hex | 0x | %x | %#x |
|-----------------------------------------------------------------------------------------------|
十进制 decimal 十六进制 Hexadecimal 八进制 Octal 二进制 Binary
5.附属关键字修饰的整数类型:
1.short long unsigned 等.C99增加 unsigned long long int类型.
2.long 不会比int长,short 不会比int短,为了适应不同的机器.
3.目前一般情况,long long 64位,long 32位,short 16位.int 为16位或32位(依机器的自然字大小而定).
6.整数溢出:
1.无符号的溢出后到0;
2.有符号的溢出后到最小的负数.
7.类型调用,编译器的编译策略:
1.int 存储不了 -> long int型 (数字大于long类型最大值) -> unsigned long (仍然不够) -> long long 类型 -> unsigned long long;
2.使用一个long类型来存储一个较小的整数.加上L后缀.例:
int 类型为16位,long 类型为32位系统中,7 保存为16位,7L存储为32位.对八进制和十六进制数同样适用,如:020L和0x10L.
3.相应的long long 类型加上LL后缀.unsigned long long 加上 ull LLU Ull 等.
4.打印(常量后缀可以使用大写小写,格式说明符只能适用小写字母):
%u unsigned int
%ld long int
%lx long int 以十六进制打印长整数
%lo long int 以八进制打印长整数
相应的 %hd short int %hx %ho 等.
5.char类型,用于存储字母和标点符号之类的字符,实际存储的是整数而不是字符.通常定义为8位内存单元.
1.ASCII码的范围0~127;
2.商用的Unicode字符集超过96000个字符,兼容ISO/IEC 10646标准,所以采用上述字符集的平台应该使用16位甚至32位的char表示方法.因为C把一个字节 (byte) 定义为char类型使用的位数(bit)数.所以这样的系统上C提到的一个字节是16位或者32位.
3.赋值:char grade = 'A';
4.C将字符常量视为int类型而非char类型.如int 为32位,char 为8位的ASCII系统中:
char cChar = 'FATE'; //'FATE'存储在32位单元中
cChar 将'FATE'存储在8位单元中,所以赋值后cChar = 'E';
5.char转义字符
' -> \' \ -> \\" -> \"
\0oo 以一个八进制表示字符,前缀0可以省略.
\xhh 以一个十六进制表示字符.
printf 使用%d 打印char 说明打印char变量,%c表示打印编码值等于那个整数的字符.可通过limits.h文件查看char的类型,是有符号型还是无符号型.
C90标准允许char 前使用signed 和 unsigned指明有符号型还是无符号型.
_Bool型,表示逻辑值true和false.由C99标准引入,C用1表示true,用0表示false,实际上也是一种整数类型,原则上仅需要1位来存储.
6.可移植类型inttypes.h
C99提供了一个可选名字集合,如:int16_t表示有符号16位整数,uint32_t无符号32位整数.
如需这些名字有效,应当在程序中包含inttypes.h头文件.(exact width type)确切长度类型
C99提出第二组名字集合(minimum width type)最小长度类型,至少大于指定长度的最小类型.如:int_least8_t
C99 可使计算速度达到最快的类型集合,"最快最小长度类型"(fastest minimum width type).如:int_fast8_t,系统中对8位有符号数而言计算最快的整数类型的别名.
C99定义的系统最大的可能整数类型,intmax_t最大的有符号整数类型.