1. 問(wèn)題

我們知道,在計(jì)算機(jī)中是用補(bǔ)碼來(lái)存放實(shí)際的正負(fù)數(shù)的,那么計(jì)算機(jī)為什么要用補(bǔ)碼來(lái)存放數(shù)據(jù),計(jì)算機(jī)課本中,那個(gè)補(bǔ)碼 = 反碼 + 1的公式又是怎么來(lái)的?

要了解這些問(wèn)題的答案,我們先要了解一些基本的知識(shí),最基本的同余公式這里就不講了,看本帖之前需要去離散數(shù)學(xué)或數(shù)論中了解下基本的同余運(yùn)算即可。

 

2. 計(jì)算機(jī)的字長(zhǎng)和同余計(jì)算

計(jì)算機(jī)的字長(zhǎng)是指計(jì)算機(jī)運(yùn)算時(shí),能存放的最大數(shù)字的的位長(zhǎng),如我們常說(shuō)的32位機(jī),字長(zhǎng)就是32位的,寄存器只有32bit,最多能放32個(gè)1,能表達(dá)的最大數(shù)字就是232 - 1

當(dāng)超過(guò)這個(gè)數(shù)字后,由于無(wú)法存儲(chǔ),會(huì)被計(jì)算機(jī)丟棄,同時(shí)會(huì)設(shè)置CPU的溢出標(biāo)志位,這就是所謂的溢出

為了簡(jiǎn)單,我們用8位機(jī)來(lái)做演示,即最大能表示的數(shù)字是28 - 1

m = 28

所以,計(jì)算機(jī)的計(jì)算 (a + b)時(shí),實(shí)際上計(jì)算的是 (a + b) % m (mod m),超過(guò)m的部分都會(huì)被丟棄,只取余數(shù)的部分,即計(jì)算機(jī)中的計(jì)