從編碼到二進位制

2022-09-06 10:15:10 字數 1604 閱讀 6035

現代我們傳遞資訊的主要方式有文字,影象,語音等等。這在計算機底層中表示方式均為二進位制,這是怎麼做到的呢?

我們小時候考試的時候就知道,要想作弊,互相兩個人可能需要事先約定好一些手勢,例如abcd四個選項用不同的手勢來表示,而這也就是我們啟蒙時期的主動編碼。而早在2023年摩爾斯就發明了一種編碼方式來表達所有的26個字母甚至更多的數字和符號。這種編碼方式使用了兩種符號,點和划。用不同的點和划進行組合,表示了許多的字母,數字和符號。還有一種叫做布萊葉編碼的二進位制編碼方式,是供給盲人使用。人們發明了這種編碼讓不能直接看到文字和不能直接聽到文字的人也能夠接收到正確的資訊。

我們知道,聲音傳播的距離不過幾百公尺甚至更短。如何將我們想要表達的資訊快速而又準確的傳遞到數百公尺千公尺甚至數百公里之外呢?這在當時19世紀是乙個棘手的問題。傳統的方式是使用書信,由火車或者是馬車去送,而這花費的時間往往太長。聲音傳播的距離和速度有限,而光呢?光可以在極短的速度內從一點到另一點,可不可以用光來傳遞資訊呢?我們知道電燈有開和閉兩種狀態,通過控制這兩種狀態,與二進位制編碼方式組合,便可以表達出我們想要傳遞的資訊。

人類的計數方式都是十進位制,因為人都有是個手指,digit不僅代表數字也代表手指的意思。而對於其他動物來說會有不同,例如**人物計數方式就是8進製,因為他們只有8個手指。對於螃蟹來說是4進製,因為他們有兩個鰲,乙個鰲有兩個鉗。而對於鯊魚來說是二進位制,因為它有兩個魚鰭。這看上去十分滑稽,可事實規律便是如此,這是對於任意乙個物種最簡單的計數方式。而對於電路呢?顯然是二進位制,因為有通和斷兩種狀態。理論上,只要有兩種不同的事物,經過有限次組合就可以表示出任意事物。例如我們可以用二進位制對26個英文本母編碼,而有了26個字母再經過組合就已經足以表達自然中所有的事物了。而正是二進位製成為了現實編碼和計算機編碼的溝通橋梁。

小學,不對,幼兒園的時候老師就有教過我們如何算數。開始都是使用手指來計算,後來我們學會了阿拉伯數字的計數方式。這種計數方式為什麼能夠在眾多計數方式中脫穎而出在世界範圍內廣泛受用呢?還有一種計數方式在現在也很流行,那叫做羅馬計數法。而為什麼主流大眾不採用羅馬計數法呢?在阿拉伯數字中有0到9總共10個數字,這與十進位制是對應的。十進位制名字叫做十進位制,而在阿拉伯數字中倒是沒有單獨的字元來表達「十」這個概念。而採用了一種「進製」的方式。十進位制逢十進一,於是「十」就用10來表示。進一步,「一百」也就是十個「十」,那麼我們可以寫作「100」。不知道讀者有沒有發現,阿拉伯計數法中,數字所表示的大小與位置有關。例如100這個數字。最右邊,表示0個1;中間表示0個10,最左邊表示1個100。於是100也就可以寫成這樣\(100 = 1 * 10^2 + 0*10^1+0*10^0\),以最右邊為第0位,往左邊依次遞增。看上去這樣表示非常的笨拙,事實也的確如此,正常人不會沒事把數字寫成這樣。

但,如果不是十進位制而是八進位制呢?讓我們拋開十進位制中數字中100的含義,看接下來的內容:

在這種表示方法下,100可以寫成這樣\(100=1*8^2 + 0*8^1 + 0*8^0\),這也等於十進位制中的64。

更極端一點,我們考慮二進位制的表達方式:

\(100 = 1*2^2 + 0*2^1 + 0*2^0\),這也就是二進位制中的4。

顯然我們沒法寫出一進製的數字。二進位制便是極端。這幾個例子也說明了阿拉伯計數法的先進,只要有足夠多的位數,就可以使用二進位制表達出所有的數字。而這還有另一層含義,如果不能用語言,聲音,影象等等方式來表達某種資訊,那麼也一定不能夠用二進位制來表達。

二進位制編碼知識

對於整型資料,二進位制的表示為符號位 數值位,對於浮點型資料,十進位制轉二進位制的方式如下 將十進位制浮點型資料轉換為二進位制時分別將整數部分和小數部分轉化為二進位制 對於整數部分,每次除2取餘直到商為0,第乙個除法所得餘數為最低位。即將餘數反序排列 對於小數部分,每次將其小數字乘以2,取其整數字,...

二進位制編碼 小記

byte 範圍 128 127 16進製制 0xff 二進位制 1111 1111 int 256 解為 首一位為符號位 整體取反碼 0000 0000 加1 為0000 0001 為1 加上符號為 byte 1 例如 16進製制 0x7f 二進位制 0111 1111 int 127 解為 首一位...

二進位制的編碼

假設有乙個只有4位的二進位制 0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111,共16個數,來表示 8到7共16個數。很自然的我們想到用0000 0111來表示0 7.8到 1該用誰來表示呢...