假设计算机是4位的:
存在的问题:
1、 正数计算 2+3=0010+0011=0101=5 OK
2、 负数计算 1±1=0001+1001=1010=-2 不OK
补码:时钟
变与不变:12点之后是几点?13点 对,1点也对。如何找到表盘上的1和逻辑上的13相统一的方法?假如你的表盘像蜗牛的壳一样是螺旋的,从俯视图来看,过了12点之后真的是13点(在1后面的一层),可是从主视图你发现13点和1点的位置是重合的。
假设:我们只关注指针在表盘的相对位置,而不关心其绝对位置
那么在这个假设下,我们可以发现,没必要用蜗牛,用平面图就可以了。
问题:如何从8点转到6点,反转2位,正转10位(因为我们实际上真的是蜗牛)
有意思的发现:减法可以用加法来计算。
问题:如何用加法来计算减法?(如何将蜗牛的结果映射到平面?)
方法:看主视图
求补码,位数截断
3-6=0011+1010=1101=-3
3-3=0011+1101=(1)0000,但是1被截断了,因为我们看的是主视图。
为什么负数的补码要为1?
以4位二进制为例,容量为16,减去2相当于加上14 1100,干脆就把1100叫做-2的补码。所以补码就是容量减去本身。
举例:
3减4等于3加上-4的补码:0011+1100=1111在补码表中对应十进制-1。
如何理解a的补码加b的补码等于a+b的补码?
现在始终指向0点(12点)问向左拨2格再向左拨3格是几点?
不知道是几点,但肯定和向左拨5格是一样的,
0+(-2)补+(-3)补=0+(-5)补,去掉0即可。