负数
- 负数可以认为是当前数量相对基准值的偏移:比如说0下3度,可以表示为“-3度”
- 负数有时隐藏在被动语境里面:比如说一个箱子可以装16瓶水,装了11瓶,我们可以说装了11瓶,也可以说差5瓶就装满一个箱子了
- 负数也可以是主动产生的:手头有100块钱,花了99块钱,“花”表示数量的减少,表示手头余额相对负方向的偏移值
补码
补码很重要的一个思想就是改变基准值,比如说有16个水桶(如下图所示),有11个水桶装了水,但是,也可以说5个水桶没有装水,于是“-5”就出现了,,当我们说+11的时候我们选取的基准值是0,而“-5”的基准值是16,也就是总水桶数,而这就是补码(细心的朋友应该发现了-5的补码如果视作无符号数,值正是+11)
环形图
上面的图可能让大家认为补码是一个线性的过程,其实我更喜欢将补码视作一个循环,见下图
k | v |
---|---|
加法 | 基准值指针顺时针转 |
减法 | 基准值指针逆时针转 |
舍弃进位结果为负数 | 指针逆时针越过0界 |
舍弃进位结果为正数 | 指针顺时针越过0界 |
加法溢出 | 指针顺时针越过7界 |
减法溢出 | 指针逆时针越过7界 |