“模”的概念:
“?!笔侵敢粋€(gè)計(jì)量系統(tǒng)的計(jì)數(shù)范圍。比如,時(shí)鐘的計(jì)量范圍是0至11,模=12。計(jì)算機(jī)也可以看成一個(gè)計(jì)量機(jī)器,因?yàn)橛?jì)算機(jī)的字長(zhǎng)是指定的,即存儲(chǔ)和處理的位數(shù)是有限的,因此它也有一個(gè)計(jì)量范圍,即存在一個(gè)“?!?。因此,表示n位的計(jì)算機(jī)計(jì)量范圍是0至2n-1,模=2n。
“?!钡膶?shí)質(zhì):
實(shí)質(zhì)上,“?!本褪怯?jì)量器“溢出”的量,它的值在計(jì)量器上表示不出來(lái),計(jì)量器上只能表示出模的余數(shù)。任何有模的計(jì)量器,均可化減法為加法運(yùn)算。
舉例:
假設(shè)當(dāng)前時(shí)間時(shí)針指向十點(diǎn),那么什么時(shí)候時(shí)針會(huì)指向八點(diǎn)呢?
第一種情況:10-2=8,倒退兩小時(shí)時(shí)針會(huì)指向八點(diǎn)。
第二種情況:10+10=8,前進(jìn)十小時(shí)時(shí)針會(huì)指向八點(diǎn)。
因?yàn)樵跁r(shí)鐘運(yùn)算中,模=12,所以,當(dāng)超過(guò)12時(shí)就會(huì)重新開(kāi)始計(jì)量。也可以理解為,在某種意義上,10-2和10+10的結(jié)果相同,它們都使得時(shí)針會(huì)指向八點(diǎn)。
此時(shí)我們發(fā)現(xiàn)2+10=12,也就是說(shuō),對(duì)“?!倍?,2和10互為補(bǔ)數(shù)。同理,計(jì)算機(jī)與之相同。n位的計(jì)算機(jī),假設(shè)n=8,那么最大的數(shù)為11111111,若加1則得到100000000,因?yàn)橹挥?位,所以最高位省略,得到00000000,又開(kāi)始了新的輪回。
這樣做的好處就是可以把減法問(wèn)題轉(zhuǎn)換成為加法問(wèn)題,只需要把減數(shù)用相對(duì)應(yīng)的補(bǔ)數(shù)表示就可以進(jìn)行運(yùn)算,這就是補(bǔ)碼思想。
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫出一個(gè)爬蟲(chóng)的Python編程課程
只會(huì)語(yǔ)法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程