學計算機,還不知道數據編碼?你OUT了

Even if the road is bumpy, the wheels have to move forward; even the rivers roaring waves, ships are sailing.即使道路坎坷不平,車輪也要前進;即使江河波濤洶涌,船隻也航行。

我們前面說過進制轉換的問題,也知道計算機中許多數據都是用二進制來存儲的,那數據傳輸過程中是否也全是由二進制傳輸呢,在二進制傳輸中還會有很多的問題,比如是否可能會被黑客劫持,網絡安全畢竟也是計算機中關鍵的一環。

想必大家也看過抗日神劇,知道在以前部隊聯絡是靠發報機來發送消息的,發報機發出來的信息對方都會用一個特殊的碼來解密。在計算機中也有關於的各自碼的概念,比如原碼,補碼等等。說到原碼,在網絡安全中,是可以解密的,對原碼的解密,不過這涉及到網絡安全的知識,這裏就不細說了。

那麼爲啥會有編碼呢?據說是爲了解決負數如何表示的問題,但小編覺得應該不只是爲了解決這一個問題。比如用1和0也可以來表示正負數,確實也有這種表示方法,叫原碼,也叫符號絕對值表示法。

那麼用0和1來表示可行不?單單從存儲和表示的角度來講好像也行,問題不大,關鍵有個數值不知大家忽略沒有,那就是0,給0加正負不都是一樣麼。莫非再出一種解決方案?有想法的以後可以自行去研究,就現在的解決方案來講,並沒有再多出一種解決方案。因爲用0和1來表示正負在進行加減乘除的時候會很麻煩,如果還要加一種方案來解決0的問題,估計就很折騰了。

那麼問題是如何被解決的呢?這就要說到補碼,補碼解決了此問題,而且還有很多優點。如:
0的表示唯一
符號位可作爲數值直接參與運算(編碼主要解決的就是負整數的問題)

那麼補碼到底又是什麼呢?
維基百科:
補碼是一種用二進制表示有號數的方法,也是一種將數字的正負號變號的方式,常在計算機科學中使用。補碼以有符號比特的二進制數定義。

正數和0的補碼就是該數字本身。負數的補碼則是將其對應正數按位取反再加1。

補碼系統的最大優點是可以在加法或減法處理中,不需因爲數字的正負而使用不同的計算方式。

那補碼該如何計算呢,這裏我們還需要藉助一個反碼,反碼是作爲一種中間碼存在的,畢竟補碼不是直接從原碼解過來的。

那麼反碼又是什麼呢?可能大家看到這麼多碼都會有點頭暈,這其實問題不大,一天看不懂,那就多看幾天唄。畢竟小編也不是一會兒就看懂的。反碼其實就是在原碼的基礎上保持負數的符號位,也就是最高位1不變,其它位反過來,也就是0變1,1變0,這樣就得到了負整數的反碼。正整數它的補碼就是原碼,反碼也是原碼,都一樣。

反碼作用不大,就只是作爲中間碼來求補碼,那再得到反碼後怎麼來求補碼呢,其實也快了,只需在反碼的最低位加1.

還有一個口訣叫補碼怎麼求,原碼求反再加一。(也有關於數據溢出的問題,這裏不細講)

例如:X=-1100110 [X]原 =1 1100110 [X]反 =1 0011001

在求到補碼後又該如何求回補碼呢,也很簡單,只需再次求反加一即可。

關於各種碼的問題暫時講到這裏啦,以後深入後再爲大家細細道來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章