|
昨天看軟件設(shè)計師教程,看到關(guān)于數(shù)字的機(jī)器編碼,有原碼、反碼和補(bǔ)碼。 這些內(nèi)容我在大學(xué)的課程中學(xué)過,但是我有些無法理解原碼、反碼和補(bǔ)碼的意義是什么。 這次看到這個知識點,我不想再這么不清不楚過去了,于是到網(wǎng)上搜索這三種碼的意義,特別是反碼和補(bǔ)碼這兩種的意義。 最終我找到了這兩種碼的意義,就是解決計算機(jī)做減法的問題。 為什么這么說呢? 首先在計算機(jī)的世界只有兩種數(shù)字0和1,我們在計算機(jī)中看到的眾多數(shù)字都是通過0和1組合表示的,比如數(shù)字7就是0111,這里我就不多解釋,因為這不是計算機(jī)專業(yè)課。 在計算機(jī)中如果進(jìn)行減法,可以看作是一個正數(shù)加一個負(fù)數(shù),但是這樣進(jìn)行直接加會出現(xiàn)各種奇怪的答案,比如會出現(xiàn)諸如 1+(-1)= -2這種結(jié)果,這顯然是不對的。 于是誕生了反碼這種解決方案,但是這種方案有一個瑕疵在面對兩個負(fù)數(shù)相加會出現(xiàn)奇怪的答案,之所以瑕疵是因為,并不是不能解決,是能夠解決,只是做的不那么漂亮,就是先將兩個負(fù)數(shù)當(dāng)作正數(shù)進(jìn)行相加,之后強(qiáng)制將結(jié)果變成負(fù)數(shù),比如(-5)+(-5)變成5 + 5算出結(jié)果之后再在前面加一個負(fù)號。 在這種背景下誕生了補(bǔ)碼這種解決方案,這種方案高明之處在于,將兩個數(shù)相減轉(zhuǎn)換成相加,為了方便理解,我用鐘表舉一個例子,比如現(xiàn)在是10點,我想要將鐘表撥弄到8點應(yīng)該怎么做?是不是有兩種方法,一個是逆時針旋轉(zhuǎn)2個小時的時間,一個是順時針旋轉(zhuǎn)10個小時。 發(fā)現(xiàn)沒有10 - 2 和 10 + 10 這兩種方案是等價的,即 10 - 2 = 10 + 10。 就這樣將 10 - 2 這么個減法的操作變成了10 + 10 的操作,將減法的操作變成了加法的操作,實際上計算機(jī)計算的時候也確實是這么計算的。 你是不是覺得很不可思議,10 + 10 怎么會等于8呢? 你這么想10 + 10 = 20 因為鐘表是12進(jìn)制(也就是超過12便會重新計算),于是20需要減去12,這樣一來不就是8了嗎。 看到?jīng)]有計算機(jī)就是通過補(bǔ)碼這種方案,將減法變成了加法,于是我得出這樣一個感慨:只有加法。 多說兩句,減法可以變成加法,乘法也可以變成加法,除法最后也可以變成加法,自然只有加法,這一刻我也突然理解,為什么電子元件中有一個累加器的單元,因為都可以轉(zhuǎn)換成加法。 |
|
|