CMU 15-213: CSAPP
data representation + datalab
-
补码乘法保低位,符号位单独判断。
-
arithmetic shift 的目的:移位保号。但对于负数,向负取整。
解决负数 /2 问题:add bias
计算机中直接 shift 一般都是 arithmetic。
IEEE float:
浮点数的值表示为:
其中:
特例:
- exp = 000000…
denormalized, when exp = 00000000…
无implied1. 0.xxxxxx- frac = 0000
0. 考虑符号位,会出现 +0 -0 区别 - frac != 0000
(较小数)
- frac = 0000
- exp = 111111…
- frac = 0000
inf - frac != 0000
nan
- frac = 0000
datalab
对形如 0000111111 的数统计 1 个数:
尝试右移 16,8,4…
与位数 有关的做法,有时是可以接受的。如这样从 优化到 。
有一个值得注意的 ub:
Signed integer overflow is undefined behavior.
曾经导致了极其诡异的错误。如果能复现,考虑从汇编排查。