1. 原码
+7的原码是0000 0111
-7的原码是1000 0111
+0的原码是0000 0000
-0的原码是1000 0000
2. 反码
一个数如果值为正,那么反码和原码相同。
一个数如果为负,那么符号位为1,其他各位与原码相反
+7的反码0000 0111
-7的反码1111 1000
-0的反码1111 1111
3. 补码
原码和反码都不利于计算机的运算,如:原码表示的7和-7相加,还需要判断符号位。
正数:原码,反码补码都相同
负数:最高位为1,其余各位原码取反,最后对整个数 + 1
-7的补码:=
1000 0111(原码)
1111 1000(反码)
1111 1001(补码)
+0的补码为00000000
-0的补码也是00000000
根据负数的补码求原码:补码符号位不变,其他位求反,最后整个数 + 1,得到原码
用补码进行运算,减法可以通过加法实现 |
7-6=1 7的补码和-6的补码相加:00000111 + 11111010 = 100000001 进位舍弃后,剩下的00000001就是1的补码 |
-7+6 = -1 -7的补码和6的补码相加:11111001 + 00000110 = 11111111 11111111是-1的补码 |
4.sizeof关键字
sizeof不是函数,所以不需要包含任何头文件,计算一个数据类型的大小,单位:BYTE
其实C语言不规定具体数据类型的大小,所以数据类型实际的大小和系统是息息相关的,但是相同的系统下,同数据类型大小一定是一样的。
size_t类型在32位操作系统下是unsigned int,就是一个无符号的整数。当我们写程序要处理一个不可能出现负值的时候,一般用无符号数,这样可以增大数的表达最大值。