本篇文章的主要目的:让已经了解two's complement运算规则的人,提供一个了解其为何如此神奇的理解方式
神奇的运算规则
学校老师在教two's complement时,大概都会提到一个把正数转为负数的简易算法,例如:
先表示出+5:Q: 现在有8 bits的表示空间,要用这8 bits表示-5该如何表示?
A:
0000 0101
把0转成1,1转成01111 1010
再加上1,就是答案-5的表示方式了 1111 1010+) 1----------- 1111 1011 (ans = -5)
对于这两种规则的三个重点
电脑做减法时是用加上一个负数的方式计算,而不是真的做减法,如此一来就不需要再特别去做一个减法器所谓的负数(-x)其实就是那个跟正数(x)相加之后为0的数想达到第2点,就必须要使用overflow的特性再以刚刚的例子来看
+5:
0000 0101
想让5跟其他的数相加后为0的方法:
0000 0101 (原本的5) 1111 1010+) 1-----------1 0000 0000 (已经overflow了,以电脑的观点来看,这是0)
所以以电脑的观点而言
1111 1010+) 1----------- 1111 1011 (-5)
的部份就是那个与5相加后为0的那个数 => -5