0%

CSAPP 1

CMU 15-213: CSAPP

data representation + datalab


  • 补码乘法保低位,符号位单独判断。

  • arithmetic shift 的目的:移位保号。但对于负数,向负取整。
    解决负数 /2 问题:add bias
    计算机中直接 shift 一般都是 arithmetic。


IEEE float:

sexpfracs | exp | frac

浮点数的值表示为:

float=sM2Efloat = sM2^E

其中:

E=expbias=(2comp)+1E = exp - bias = (2-comp) + 1

s=1.frac  (implied1)s=1.frac\; (implied 1)

特例:

  • exp = 000000…
    denormalized, when exp = 00000000…
    无implied1. 0.xxxxxx
    • frac = 0000
      0. 考虑符号位,会出现 +0 -0 区别
    • frac != 0000
      (较小数)
  • exp = 111111…
    • frac = 0000
      inf
    • frac != 0000
      nan

datalab

对形如 0000111111 的数统计 1 个数:

尝试右移 16,8,4…

与位数 nn 有关的做法,有时是可以接受的。如这样从 O(n)O(n) 优化到 O(logn)O(\log n)


有一个值得注意的 ub:

Signed integer overflow is undefined behavior.

曾经导致了极其诡异的错误。如果能复现,考虑从汇编排查。