前言:无符号编码:基于传统的二进制编码,表示不小于零的数;补码编码:有符号整数的最常见表达方式,可正可负;浮点数编码:实数的科学记数法的以2为基数。其中整数编码的表达是精确的,而浮点数编码是近似的。
2.1信息存储:
字节:8个位组成的块,是最小可寻址的内存单元,大小单位。常用数据的大小如下图所示
虚拟内存:机器级程序将内存视为一个非常大的字节数组。内存的每个字节有一个唯一的数字标识,称之为地址,所有可能的地址集合就被成为虚拟地址空间。
2.1.2字数据大小
字长:每一个计算机都有一个字长,指明指针数据标称的大小。故字长决定了虚拟空间的大小,如果一位字长为w位的机器而言,我们平常所说的32位。64位指的是字长32或64位。
2.1.3寻址和字节顺序
小端法:最低有效字节在最前面的方式;大端法:最高有效字节在最前面的方式。不同的机器可能使用不同的方式,大多数Intel兼容机只使用小端法,Android和IOS都只使用小端法。
字节顺序带来的问题:
a.不同机器间通过网络传输2进制数据时,发送方和接收方使用方式不一致。解决方法:在网络应用程序的代码编写中建立关于字节顺序的规则,即发送方将其转换成网络标准,接收方将网络标准转换为自身内部表示。
b.在检查机器级程序时,阅读表示整数数据的字节序列时字节顺序很重要。
c.编写规避正常的系统类型的程序时。
2.1.9C语言中的移位运算
对于右移运算来说,机器存在两种右移运算:逻辑右移和算术右移。逻辑右移是在左端补K个0,算术右移是在左端补k个最高有效位的值。由于C语言中没有明确规定哪一种是逻辑或算术右移,故存在可移植性问题,但是几乎所有的机器都对有符号数使用算术右移。