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

扩展补码数字:符号扩展,添加最高有效位的值的副本