信息存储
1.位:位(bit)是电子计算机中最小的数据单位,每一位的状态只能是0或1.
2.字节:8个二进制位构成一个字节(byte),它是存储空间的基本计量单位。1个字节可以存储1一个英文字母或者半个汉字。
3.字:字由若干字节构成,字的位数叫做字长,不同档次的机器有不同的字长。例如:一台8位机,它的一个字就等于1个字节,字长8位;一台16位机,它的一个字由两个字节构成,字长1位。
4.数据大小:计算机和编译器支持多种不同方式的编码数字格式,如整数和浮点数以及其他长度的数字。
5.字节顺序:大端法(最高有效字节在最前面);小端法(最低有效字节在最前面)
6.用位来表示信息,优点是易于存储,可靠传输。
7.C语言中字符串被编码为一个以null(其值为0)字符结尾的字符数组,每个字符都是用标准的编码来表示,常用的是ASCII编码。
- 大小端示例1
char s[6]="18243"
在任何平台中都可以得到相同的结果
下图中是用ascii码来表示字符
- 大小端示例2
十进制 15213
二进制 0011 1011 0110 1101
十六进制 3 b 6 d
8.C语言中的位级运算
- C语言中&,|,~,^操作可以应用于整型类型long,int ,short,char,unsigned中,将整数看做是字节向量(按位进行运算)
- 示例
~0x41->0xbe ~01000001->10111110
0x69&0x55->0x41
9.C语言中的逻辑运算
- &&,||,!(与,或,非)
- 示例
0x69&&0x55->0x01
10.掩码运算,这里的掩码是一个为模式,表示从一个字中选出的位的集合。例如,可以利用0xFF&x生成一个由x的最低有效字节组成的值,而其他字节被置为0。
11.移位运算
- 左移:x<<y表示将x左移y位,左边的位全部丢弃,在右边填0.
- 右移:x>>y表示将x右移y位,右边的位全部丢弃,对于逻辑移位左边填0,对于算术移位填充符号位。
整数
1.整数数值的表示范围(以32位机器为例)
C数据类型 | 最小值 | 最大值 |
---|---|---|
char | -128 | 127 |
unsigned char | 0 | 255 |
short | -32768 | 32767 |
unsigned short | 0 | 65535 |
int | -2 147 483 648 | 2 147 483 647 |
unsigned int | 0 | 4 294 967 295 |
long | -2 147 483 648 | 2 147 483 647 |
unsigned long | 0 | 4 294 967 295 |
long long | -9 223 372 036 854 775 808 | 9 223 372 036 854 775 807 |
unsigned long long | 0 | 18 446 744 073 709 551 615 |
2.整数编码
- 补码表示中最高位表示符号位,0表示非负,1表示负数。负数在计算机中是以补码的形式保存。
- 数值范围
无符号数:0~2w-1,w为位向量的长度。
补码:-2w-1~2w-1-1,w为位向量的长度。
3.扩展与截断
- 符号位扩展:给定一个w位的有符号位整数x,将其扩展转换为一个w+k位的整数,要求其值相等。
- 0扩展:在扩展开头简单加0扩展即可。
- 截断:将一个w位的数字x截断为一个k位数字,这时会丢弃w-k位,得到新的数字x’