04、計算機基礎--編碼


數值編碼

編碼是用文字、符號或者數碼來表示某種信息的過程。對數值來說,主要有兩種編碼方式:定點格式和浮點格式。(現實中真實的數值被稱為真值。)

定點整數

小數點固定在數的最低位之后(最右側),稱其為定點整數。如果在最高位(最左側)就是定點小數。

定點整數不考慮正負,只表示0和正整數的話,就是無符號整數。

N位二進制共有\(2^N\)個編碼,表達真值:0 ~ \(2^N - 1\)

如16位和32位二進制所能表示的無符號整數范圍是:0 ~ \(2^{16} - 1\)和0 ~ \(2^{32} - 1\)

通常機器數的最高位(最左側)稱為符號位,用0表示正數、1表示負數,這就是有符號整數。

原碼、反碼、補碼

計算機中的有符號數有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數值位,三種表示方法各不相同 。

原碼:是一種計算機對數字的二進制定點表示方法。原碼不能直接參與運算,會出錯。
反碼:正數的反碼和原碼相同,負數的反碼是對正數逐位取反,符號位保持為1(負數)。
補碼:正整數的補碼是其二進制表示,與原碼相同。負數的補碼是將除符號位外所有位取反加1.

在原碼中計算出錯,是因為數學問題。

例如:在數學上1 + (-1) = 0,將其換算成二進制原碼的表現形式如下:

00000001+10000001=10000010 轉換10進制為-2,所以錯誤。

所以,在計算機系統中,數值一律用補碼來表示和存儲。因為補碼可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。

在補碼中,負數補碼是將對應正數補碼取反(即將0變為1,1變為0)再加1形成。

例如:正整數105,用8位補碼表示:

\([105]_{補碼}\) = 01101001B

負整數-105,用8位補碼表示:

\([-105]_{補碼}\) = \([01101001B]_{取反}\) + 1 = 10010110B + 1 = 10010111B

所以,補碼就是用來解決負數在計算機中的表示問題。

最后總結如下:

對於正數來說:補碼 = 原碼 = 反碼
對於負數來說:補碼 = 原碼的反碼 + 1

字符的編碼

在計算機中,字符需要用若干位二進制碼的組合表示,即字符的二進制編碼。由於字節為計算機的基本存儲單位,所以通常8個二進制為單位表達字符。

一般在英文狀態下一個字母或字符占用一個字節,一個漢字用兩個字節表示。

字節和字符

字節和字符的轉換根據語言和編碼的不同,它們的轉換關系也有區別:

ASCII 碼中,一個英文字母(不分大小寫)為一個字節,一個中文漢字為兩個字節。
UTF-8 編碼中,一個英文字為一個字節,一個中文為三個字節。
Unicode 編碼中,一個英文為一個字節,一個中文為兩個字節。

ASCII碼

ASCII碼是一種非常常用的編碼,標准ASCII碼用7位二進制編碼,故有128個。而計算機的存儲單位為8位,所以表達ASCII碼時最高D&位通常為0;通信時,D7位通常用作奇偶校驗位。

奇偶校驗(Parity Check)是一種校驗代碼傳輸正確性的方法。

其中標准ASCII碼及其字符表如下所示:

ASCII碼表中的前32個和最后一個編碼是不可顯示的控制字符,用於表示某種操作。

從20H開始(含20H)的95個編碼是可顯示和打印的字符,其中包括數碼、英文字母、標點符號等。

數字0~9的ASCII碼為30H~39H,去掉高4位(或者說減去30H)就是BCD碼。

其中大寫字母和小寫字母之間相差20H(32),所以大小寫字母非常容易互相轉換。

Unicode

ASCII碼表達了英文字符,但卻無法表達世界上所有語言的字符.

Unicode給每個字符提供了一個唯一的數字,不論是什么平台,不論是什么程序,不論是什么語言

Unicode使用16位編碼,能夠對世界上所有語言的大多數字符進行編碼,並提供了擴展能力。Unicode作為ASCII碼的超集,保持了與其兼容。

Unicode的前256個字符對應ASCII字符,16位編碼的高字節為0、低字節等於ASCII碼值。

例如:大寫字母A的ASCII碼值是41H,用Unicode編


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM