1 浮点运算是不可结合的,比如,在大多数机器上,表达式 (3.14+1e20) - 1e20 求得的值会是0.0,而 3.14 + (1e20 - 1e20) 求得的值会是3.14。
# 比如Python
>>> a = 3.14+1e20
>>> a - 1e20
0.0
>>> b = 1e20 - 1e20
>>> 3.14 - b
3.14
2 大多数计算机使用8位的块,或者字节(byte),作为最小的可寻址的内存单位。机器级程序将内存视为一个非常大的字节数组,称为虚拟内存(virtual memory)。内存的每个字节都由一个唯一的数字来标识,称为它的地址(address)。所有地址的集合就称为虚拟内存空间(virtual memory space)
3 因为虚拟地址是以一个字(word,总线的数据传输大小)来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。也就是说,对于一个字长为 w 位的机器而言,虚拟地址的范围为 0 ~ ,程序最多访问
个字节。
【问题】32位字长的电脑限制虚拟地址空间为4GB,64位字长的为16EB
【解释】32位字长,即32位组成一个字,每一位取值为0或1,那一个字的能表示的所有地址就有2的32次方个。64位同理
4 在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小地址。
5 假如一个w位的整数,其位表示为[ ,
,...,
,
],其中
是最高有效位,而
是最低有效位。假设w是8的倍数,这些位能被分组成字节,其中最高有效字节包含位[
,
,...,
],而最低有效字节包含位[
,
,...,
],其他字节包含中间的位。某些机器选择在内存中按照从最低有效字节到最高有效字节的顺序存储对象,称为小端法(little endian);而另外一些机器选择在内存中按照从最高有效字节到最低有效字节的顺序存储对象,称为大端法(big endian)。
6 命令语 man ascii 可以得到一张ASCII字符码的表
略