计算机系统抽象

二进制可以表示任何东西

n 位数字(base B) 可以表示 <= $B^n$ 个事物

数字

计算机中,用二进制表示数字

字符

26 个字符用 5 bits 可以表示
ASCII: 7 bits

布尔值

0 -> False
1 -> True

unsigned

sign and magnitude

将第一位作为符号,剩下的作为无符号数。

这样就会导致存在两个 0,$0…0_{two}~and~10…0_{two} = \pm 0_{ten}$
最大的正数 $01…1_{two}= (2^{(n-1)}-1)_{ten}$
最小的负数 $1…1_{two}=-(2^{(n-1)} - 1)_{ten}$

biased notation

类似于 unsigned,但是会有偏移从而让 0 粗略的在中间。值 = “unsigned value” - bias
传统偏移量 $(2^{(n-1)} - 1)$

此时,0 为 $01…1_{two}=0_{ten}$
最大的正数 $1…1_{two} = (2^{(n-1)})_{ten}$
最小的负数 $0…0_{two}=-(2^{(n-1)} - 1)_{ten}$

one’s complement

然而此时 0 有两个 $0…0_{two}~and~1…1_{two} = \pm0_{ten}$
最大的正数 $01…1_{two} = (2^{(n-1)}-1)_{ten}$
最小的负数 $10…0_{two} = -(2^{(n-1)}-1)_{ten}$

two’s complement

对于 0,只有 $0…0_{two} = 0_{ten}$
最大的正数 $01…1_{two} = (2^{(n-1)} - 1)_{ten}$
最小的负数 $10…0_{two}=(-2^{(n-1)})_{ten}$

正数翻转所有位并加 1 可以得到负数。

对于补码来说

会溢出 不会溢出
+ + + - + +
- + - + + -