【转载】终于搞明白二进制中,原码、反码、补码 到底都是些什么东东?
要说清这个问题,需要颠覆你对补码的理解 第一步,就像练北冥神功要先散功一样,先把你心中对原码,反码,补码的一套认识全部忘掉 | | | | | | | | | | | | | | | | | V 第二步,正式开讲 首先灌输一个新的概念叫,模 什么是“模”,想象日常使用的钟表,它可以显示0~12点的时间,假设现在是2点钟,请用手动拨动时针的方式将时间减4小时,你会怎么做? 有两种方式: 逆时针将时针拨4小时 顺时针将时针拨8(12-4)小时 这里要讲的是第二种方式,为什么顺时针拨12-4也可以达到和正常思维的第一种方式一样的位置。 12就是模。 同样的,如果是十进制的两位数,80-10 和 80+90在不考虑百位数的基础上都是70。这里的90就是100-10得来的,这种情况下100就是模 模就好比是一个极限,在它的范围内,两个相加等于模的数互为补数,还是举100的例子 90和10, 55和45,68和32,互为补数 在模的范围内做减法,可以将“ X-Y ”的减法变更为“ X+Y的补数 “的加法,当然前提是不考虑百位数 思考题, 上面举的例子是大数减小数,那么如果是小数减大数会怎么样呢? 如果是10-80,结果应该是-70,但如果按照10+(100-80),结果是30。 而很明显-70和30不是一回事,这里也没有百位数的问题,这种情况应该怎么破? 当初的那些先贤们想出来的办法很简单