[計組]原碼、補碼及背後的數學原理

[計組]原碼、補碼及背後的數學原理

來自專欄機器學習小白筆記5 人贊了文章

有個梗叫做

PHP是最好的語言

我現在想說,二進位是世界上最完美的進位!

因為人類長著10個手指頭,所以自然的我們熟悉的生活就是10進位的。我們用了幾萬年的時間學會了表示數,學會了加減乘除,學會了各種運算規律。是前人不斷的發現和我們不斷的學習,讓我們掌握了10進位這種複雜的表達

但是學計算機的人都知道計算機其實是二進位的。事實上,生活中更普遍的都是二進位,電子元件的開與關,正與反,對與錯,二進位才是這個世界上應用最廣泛最簡潔完美的進位。至於為什麼最完美,以及更深刻的了解二進位,有興趣的童鞋可以看看這本查爾斯?佩措爾德《編碼》

接下來我想寫一下二進位的運算規律

以下所有的內容都以一個位元組(8-bit)為對象進行研究的,就是假設我們現在用的計算機都非常簡陋,儲存單元裡面就只能儲存一個位元組。並且都是定點數

  1. 無符號數和有符號數

無符號數可以表示從0到255總共256個數

因為計算機大部分都是有符號數,所以我們只看有符號數,有符號數可以表示-127到+127(注意:0有+0和-0)總共256個數。

2.小數和整數

順便說一嘴小數和整數,需要注意的是,整數我們可以表示從0到127中間的每一個整數,但是小數不行。從絕對值來看,小數最小是 2^{-7} ,就是0.0078125,接下來就是2個 2^{-7} ,也就是0.015625,所以說小數部分在十進位看來是有空隙的,想表示0.009,暫時用這種表示方法和這個簡陋的計算機是不可以的。


接下來就是重點部分

原碼:

其實就是上面的那種表示方法就是原碼了,最高位0/1是符號位,後面的是絕對值的數值

補碼:

補碼的出現大家都知道是為了計算減法而來的,那我們先從十進位的減法運算來一窺裡面的思想

十進位加法:

現在假設我們就是長著10個指頭的人,我們是小孩子要學算術,那麼3+4,就是數到第三個指頭,然後往右再數4個,就是7

更多位數的計算就是更多的小朋友

十進位減法:

7-4,小朋友先數到第7根指頭,然後減4就是往左邊數四個

假設你是一個只會往右邊數數的小朋友,往左邊數數對你來說很難,那麼你想要計算7-4的時候,可以7+6-10

同樣的,7-14的話,就7+6-20,往前走6個指頭,最後後退20步。

這樣做的好處就是,我們只用往前走就好了,往後退這個有難度的操作我們就10格10格的退

那麼這裡的6-10,其實就是-4的補碼

總結一下:

往前進,加法,不需要補碼

往後退,減法,需要補碼

補碼跟進位有關,10進位,就 10^{n} 的補

二進位補碼:

同樣的

往前進,加法,不需要補碼

往後退,減法,需要補碼

補碼跟進位有關,2進位,就 2^{n} 的補

因為我們研究的是8-bit的有符號數,所以我們就 2^{7} 的補

在計算整數的補碼的時候

比方說25-13,就是25+115-128

體現在運算上,就是取反+1,(因為13和114(13+114=127)是剛好相反的,然後再加上1)

小數同樣的道理,但是小數裡面,我們要用1來補

只要你理解了十進位在做減法的時候的補碼,二進位就能理解了

反碼:

反碼就是在求補碼的過程當中的中間的一步

總結感想:

奧卡姆剃刀原理告訴我們「如無必要,勿增實體」,這個世界的法則越簡單越好,補碼恰恰就是一個讓計算機簡單化的發明,計算機學會了加法,那麼就不要再教它減法了,只要告訴它減法就是另一種變形的加法就好了


推薦閱讀:

TAG:計算機 | 數學 | 計算機組成原理 |