在计算机的基础知识中,原码补码和反码是必须要知道的一项内容,
呐,cpu只能计算加法,但是为什么要引入反码和补码,为什么负数用补码做加法可以代替原 码的减法运算?
以下是正题:
在位数不变的情况下,以三位二进制数为例,从0~7分别是:
000-001-010-011-100-101-110-111,
8是1000,在位数不变的情况下,可以把它视为和000是相同的情况,
也可以把它视为一个时钟,8点在正时间顺序上加2是10点,同样在逆时间顺序上减(倒退)10个小时同样也是10点,也就是说8+2=8-10,
这个正2是由负10加上模12得到的,此处的算法其实和高中字母前后移位是差不多道理:
假设字母x(小写)向后移5位:str((ord(x)+5)%26+97)
假设我有一个原码010,他的反码是101,反码的求法是原码取反,但更应该理解为是三位二进制最大值111-010,000~111是8个数,所以:反码=(模-1)-原码这个公式可以换成反码+1=模-原码;补码=模-原码,所以原码的减法运算可以换成是补码的加法运算。
然后关于符号位-2,减一个正数,正数符号位为0,再变成补码后符号位不变,符号位为0,在计算的时候最高位加0不变,所以可以带着符号位一起计算。
从b大看来得哈哈哈。
442



被折叠的 条评论
为什么被折叠?



