深入理解计算机系统 - 信息的表示与处理

  1. 基础概念
    1. 整数的表示虽然只能编码一个相对较小的数值范围,但是这种表示是精确的;而浮点数虽然可以编码一个较大的数值范围,但是这种表示只是近似的。
    2. 由于表示的精度有限,浮点运算是不可结合的。
  2. 信息存储
    1. 字节是最小的可寻址的内存单元。内存可以看成一个非常大的字节数组,内存的每一个字节由唯一的数字来标识(地址)。所有可能地址的集合就是虚拟地址空间。
    2. c语言把每个指针和类型信息联系在了一起,指针的值表示某个对象的位置,而它的类型表示那个位置上所存储的对象的类型。
    3. 字长决定了虚拟空间的最大大小,一个字长为w位的机器,虚拟地址的范围是$0~2^w-1$,最多可访问$2^w$个字节。字长是指针数据的标称大小。
    4. 多字节对象被存储为连续的字节序列,对象的地址为所用字节的最小的地址。
    5. 小端法与大端法
      1. 在内存中从最低有效字节到最高有效字节顺序存放对象叫做小端法。
      2. 在内存中从最高有效字节到最低有效字节存放数据叫做大端法。
      3. 例如int型变量x位于ox100处,存放的数据为0x01234567,地址ox100~ox103的字节顺序依赖于机器的类型
      4. image
    6. c语言中的移位运算
      1. 算术左移与逻辑左移一样,将x左移k位,是丢弃最高的k位,在最低的k位补0.移位运算是从左到右可结合的。x<<j<<k等价于(x<<j)<<k。
      2. 逻辑右移是在最高位补k个0,算术右移是在最高位补k个最高符号位。
      3. 几乎所有的编译器、机器组合都对有符号数进行算术右移,对于无符号数来说,右移必须是逻辑的。
      4. 当移位k大于数据的长度时,比如对整型变量x(4个字节32位)。x>>k,如果k大于32,那个实际位移量为k mod 32。
  3. 整数表示
    1. 补码编码
      1. image

猜你喜欢

转载自www.cnblogs.com/cyj1258/p/12576939.html
今日推荐