0%

深入理解计算机系统读书笔记(二)

  • 数据的表示,无符号数一位就是一个数,有符号数采用补码的形式表示,最高位为负权,当最高位为1时其权重为-x(2**(w-1)),w为位数,x为最高位的取值。于是乎一个有符号数的补码表示就成了所有正权与负权之和。
  • 一个整数能被二进制方式表示,其根源在于其编码方式的唯一性,即双射,解释就是一个数在编码后有唯一的一个二进制格式与之对应,而这个二进制排列顺序在转换为整数后也有且仅有一个数与之对应。就想数学里的反函数一样。
  • 原码表示有符号数通过最高位作为符号位,如果最高位为1,则剩下的位取负权,如果最高位为0,则剩下的位取政权
  • 反码表示有符号数,最高位的权重为-x.(2**(2-1)-1) x为最高位的取值
  • 整数类型的强制类型转换,将一个无符号数转换为有符号数时二进制位的数据不变,变的只是解释这些位的方式。
  • 一个规律:一个4位有符号数-1,其强转为无符号数之后为15,注意到1+15 = 16 = 2*4。这样就能很方便得进行负数有符号数转为无符号数,当然正数两种表示方式的结果都一样,当然一切都建立在有符号数使用补码表示。其原理为,最高位权重,对于一个4位表示的整数, 当使用补码时,最高位为1时权重为-8,使用无符号数时其权重为8,两者之间差了2***4 = 16。
  • 将无符号数转换为有符号数的时候,当无符号数小于等于有符号数的最大值的时候保持不变,当无符号数大于有符号数的最大值的时候,转换后的值为U-2**w,U为当前无符号数,w二进制位数。
  • 无符号数的长度扩展是零扩展,即大端法表示在左侧填充0,对于有符号数则是符号填充,负数填充1,正数填充0
  • 在将一个长度较小的有符号数变成无符号长度较大的数的时候,是先进行符号填充再进行符号转换的,如果顺序错了将产生完全不一样的结果。
  • 当一个有符号数与无符号数进行运算时会发生隐式类型转换,项范围更广的值转换。这个过程是非直观的,往往会导致很多预料之外的结果。
Buy me a coffee.

欢迎关注我的其它发布渠道