CSAPP 1 - 原码、反码、补码、IEEE 754 实战

求任意数x的补码

  1. 求x绝对值abs(x)的原码为Bin_1,比如 0001 0100
  2. 如果,x本身为非负数,则x的补码即为Bin_1。否则进入下一步。
  3. 从右向左开始,找到第一个为1的二进制位,此二进制位左侧不包括它的取反码为Bin_2。 此例中,Bin_2 = 1110 1100

求浮点数y的IEEE 754格式

  1. 求y的绝对值abs(y),将abs(y)的整数部分通过除二取余法得到原码为Bin_1,小数部分通过乘二取整法得到原码为Bin_2;则abs(y)的二进制表示为Bin_1.Bin_2。
  2. 向左或向右移动小数点E位,使得正数部分为单独一个二进制位 1,即:Bin_1.Bin_2 = 1.Bin_3 的 E 次方。记M = Bin_3。
  3. 根据 E = exp - Bias,得到exp的值。32位(float类型)IEEE 754中,Bias = 127,64位(double类型)中Bias = 1023。
  4. 若y为正数,则记二进制位s等于0,否则等于1。
  5. 则浮点数y的IEEE 754格式为:s | exp | M,其中|为分隔符,实际编写中不需要。