目录
数据类型
程序的本质就是对数据进行处理,但程序并不能处理任意类型的数据,只支持有限的一些数据类型。
C语言支持的数据类型:
-
基本(简单)数据类型:整数类型、浮点类型、字符类型。
-
复杂数据类型:数组、指针、结构体、共用体、枚举。
基本数据类型
基本数据类型分为下面四种:
-
整数类型
-
浮点类型
-
字符类型
-
空类型
整数类型
-
short:短整型,通常占2个字节(Byte)的内存空间,表数范围为[-32768,+32767]。(16位中,最高位表示符号,1表示负,0表示正,其他15位表示数值位)
-
unsigned short:无符号短整型,只能表示非负整数,占2个字节(Byte)的内存空间,表数范围为[0,65535]
-
int:整形,通常占4个字节。表示范围为[-2^31,2^31-1]
-
unsigned int:无符号整型,只能表示非负整数,通常占4个字节,表数范围为[0,2^32-1]
-
long:长整型,通常占8个字节。表示范围[-2^63,2^63-1]
-
unsigned long:无符号长整型,只能表示非负整数,通常占8个字节,表数范围为[0,2^64-1]
-
long long:超长整型。通常占8个字节。表示范围[-2^63,2^63-1]
-
unsigned long long:无符号超长整型,只能表示非负整数,通常占8个字节,表数范围为[0,2^64-1]
学习方法:熟练记住基本数据类型的关键字拼写,占用储存空间大小、存储形态、表数范围。
C语言标准并没有明确规定数据类型所占内存空间大小,只规定了相对大小
如:short ≤ int ≤ long ≤ long long,具体以编译器为主。
操作系统按字节为单位将整个内存空间划分为一个个的内存单元,每个内存单元占1Byte,并且从零开始按顺序依次给所有内存单元编号,这个编号就是内存单元的地址。
所有整数在内存中以补码形式存储。CPU也是以补码形式对整数进行运算处理的
正整数的原码、反码、补码完全一样。
负整数的反码为原码符号位不变,其他位按位取反计算得到,补码为反码符号位不变,加1得到。
补码转换成原码的方法有两种:
第一种方法是:将补码减一得到反码,再将反码按位取反即可得到原码(符号位始终保持不变)
第二种方法是:补码的补码就是原码。
例子:
数据 | 1000 | -1000 |
---|---|---|
原码 | 0000 0011 1110 1000 | 1000 0011 1110 1000 |
反码 | 0000 0011 1110 1000 | 1111 1100 0001 0111 |
补码 | 0000 0011 1110 1000 | 1111 1100 0001 1000 |
有符号的整数的最高位表示符号位,1表负,0表正。其他位表示数值位。
对于无符号类型,没有符号位所有位都为数值位
-1000+1
1111 1100 0001 1000
0000 0000 0000 0001
1111 1100 0001 1001
常用进制:
-
二进制(BIN)
-
八进制(OCT)
-
十进制(DEC)
-
十六进制(HEX)
sizeof关键字的功能:计算某个数据类型、变量、常量等所需要占用的内存空间大小。
常用占位符:
-
%hd:十进制short类型数据
-
%hu:十进制unsigned short类型数据
-
%d:十进制int类型数据
-
%u:十进制unsigned int类型数据
-
%ld:十进制long类型数据
-
%lu:十进制unsigned long类型数据
-
%lld:十进制long long类型数据
-
%llu:十进制unsigned long long类型数据
-
%x:十六进制int类型数据
-
%o:八进制int类型数据
-
%l:十进制long类型数据
-
%f:十进制float类型数据
-
%lf:十进制double类型数据
-
%e:科学技术形式的float类型数据
-
%le:科学技术形式的double类型数据
浮点类型
浮点类型(不存在原码反码补码这个概率)分为两种:
-
float:单精度浮点型,通常占4Byte储存空间,表数范围为(-3.4 * 10^38 , -3,4 * 10^-38)和(3.4 * 10^-38 , 3,4 * 10^38)
-
double:双精度浮点型,通常占8Byte储存空间,表数范围为(-1.7 * 10^308 , -1.7* 10^-308)和(1.7 * 10^-308 , 1.7 * 10^308)
浮点数不存在原码反码补码概念,并不是以补码形式存储。
浮点数的储存形态(IEEE754)国际标准规定的格式储存和处理。
字符类型
用于表示文字符号数据,比如英文字母、标点符号等。
char:字符型,占1个字节(Byte),最高位为符号位, 0 表正, 1 表负,(字符型用单引号),表数范围为[-128 , 127]
字符:character
unsigned char:无符号字符型,占1Byte,没有符号位,8位全部都是数值位,表数范围为[0,255]
char 和 unsigned char可以表示字符,也可以用来表示整数,因为他们的本质就是整数。
编码(Encode):按照某个规则将非二进制数据(比如文字符号、图像、声音、视频等)转化为二进制数据,以供计算机系统存储和处理。
解码(Decode):编码的反过程,解码方案必须和编码方案对应,就是将二进制 数据还原为原始的非二进制数据,比如播放一个mp3文件。
ASCII 编码表
英文字符 | 编码值 |
---|---|
a | 97D |
b | 98D |
A | 65D |
B | 66D |
0 | 48D |
1 | 49D |
空格 | 32D |
\n (换行符) | 10D |
\r(回车符) | 13D |
\0(空字符,没有任何显示效果,C语言将其用作字符串结束符) | 0D |
记住常用字符的ASCLL码值
字符分为:
普通字符:如 ’a’ , '3' 等
转义字符:如 ' \n ' ,' \r ' , ' x61'(16进制61)
char c1
c1 = 'a' // c1 = 97 等效
输入字符可以用 scanf 也可以用getchar
空类型
void,非常特殊的一个数据类型,不能用于定义变量或常量,表示不确定的数据类型,通常用于类型占位。
关键字(Key Words):具有特别意义的标识符。
要牢记数据类型关键字的拼写!!