1.信息存储
大多数计算机使用8位的块(字节),作为最小的可寻址的存储单位。
字长: 指明整数和指针数据的标称大小,决定虚拟地址空间的最大大小。对于一个x位的机器,虚拟地址的范围为0~2^x-1 ,程序最多访问2^x个字节。
| 类型 | 类型 | 字节数 | 字节数 |
|---|---|---|---|
| signed | Unsigned | 32位 | 64位 |
| char | Unsigned char | 1 | 1 |
| short | Unsigned short | 2 | 2 |
| int | Unsigned int | 4 | 4 |
| long | Unsigned long | 4 | 8 |
| int32_t | uint32_t | 4 | 4 |
| int64_t | uint64_t | 8 | 8 |
| char* | 4 | 8 | |
| float | 4 | 4 | |
| double | 8 | 8 |
最低有效字节在最前面为小端法,反之大端法。目的是为了在网络应用时双方使用同一个规则。
移位运算时右移逻辑右移和算术右移。
-
逻辑右移,在左端补k个0 java中x»>k
-
算术右移,在左端补k个最高有效位的值 java中x»k
2.数字表示
计算机中有符号数可用三种方式进行表示,原码、反码、补码。
1.原码
原码表示方法是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值.
[+1]原 = 0000 0001
[-1]原 = 1000 0001
8位二进制数的取值范围为:
[1111 1111 , 0111 1111]
即
[-127 , 127]
2.反码
反码表示方法是正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
3.补码
补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
补码出现意义
1.为了解决0编码的二义性,即
[0000 0000]原和[1000 0000]原均表示0
2.增加一个最低数的表示,即
8位二进制, 使用补码表示的范围为[-128, 127].
3.可以将减法转变为加法
负数是以补码的形式保存的,也就是负数的真值是补码,当我们要减一个数时,可以直接加上其补码。
扩展一个数字的位表示
扩展无符号数:零扩展,开头加0
扩展补码数字:符号扩展,添加最高有效位的值的副本