1. 程式人生 > >【計導非課系列】 第五節 二進位制 進位制計算 編碼

【計導非課系列】 第五節 二進位制 進位制計算 編碼

【計導非課系列】 第五節 二進位制 進位制計算 編碼

對於計算機來說,數字只有兩個——0和1。

資料對於計算機來說是相當重要的,而電路的通斷兩種狀態決定了計算機只能通過1和0來進行一切事情的處理。所以,我們見到的計算機的一切都是通過二進位制才能呈現出來的。這次就會著重介紹一下進位制的計算和編碼。

博文目錄

  • 什麼是資料
  • 數的進位制
  • 二進位制
  • 進位制的轉換
  • 邏輯運算
  • 計算機對資料的處理
  • 常用編碼
  • 數的表示
  • 符號數的機器碼錶示

before we start…

計算機為什麼採用二進位制?

計算機中,數是用物理器件的狀態表示的,二進位制只有兩種狀態,0和1,容易用電路表示。
二進位制規則簡單,容易

用數字邏輯電路實現
二進位制還可以表示邏輯值,進行邏輯計算。
To say it simply, 這本來就是電路決定的。而這樣一決定之後,正好帶來了許多好處:比如0代表假的,沒發生過的;比如所有數字只有兩種狀態,便於管理,寫起來程式還方便……總之,二進位制就是強!

自動計算要解決的問題

資料的儲存、表示、運算,以及自動執行的計算模型

計算機主要技術指標

  • 字長:計算機一次存取傳遞或加工的資料長度。也就是系統是多少位的。
  • 主存容量:記憶體(主儲存器)所能儲存的二進位制容量,主存越大,交換越少,處理速度越快。
  • 計算機指令執行速度:(MIPS),每秒鐘執行加減法有幾百萬次,可以通過時鐘頻率間接估計。
  • 時鐘週期(頻率、主頻) CPU主頻速度:CPU在單位時間內發出的脈衝數。
  • 資料輸入/輸出最高速率:計算機的資料吞吐量。
    例題:下面的特點分別對應哪些技術指標?
    自創例題

資料

什麼是資料

資料:反應客觀世界事物屬性的原始記錄。

需要對資料做什麼

  • 儲存資料:資料怎樣做才能被記到計算機上?用0和1。
  • 組織資料:怎樣儲存這些0和1對我最有用?資料結構。

儲存容量單位換算

在計算機裡面,“千”不是所謂的103,而是210!也就是1024。
儲存容量指的是儲存器有多少個儲存單元。最基本的儲存單元是位,bit,可以存放1個0或者1。
關係如下:
1B=1位元組=8位
1KB=1024B=210

B
1MB=1024KB=220B
1GB=1024MB=230B
1TB=1024GB=240B
1PB=1024TB=250B
1EB=1024PB=260B
硬體廠商和軟體大小的“矛盾”
硬體廠商認為,Kilo當作1000……
軟體認為,Kilo當作1024……

數的進位制

什麼是進位制?

就是,逢幾進一

所有進位制都是這樣規定的:

基數+位權
基數:幾進位制基數就是幾。二進位制就是2,十進位制就是10!
而且,幾進位制代表能出現的數字,就在0到這個數減一。
位權:數制中某一位上1所代表的多大。所處位置的“價值”。
啥意思?就是說這一位有多大。比如,百位,位權就是100唄~
對於十進位制243,2位權100,4位權10,3位權1。

所有進位制都是這樣計算的:

進位制計算

進位制的作用

數制
規定了一個數位上最多有多少種狀態。

二進位制數

符號0是0,符號1是1,這就是二進位制

二進位制的儲存問題 位 位模式

資訊表示的最小單位:位 bit

有兩種狀態的物質就構成一個位,用開關、磁極、電容器、觸發器就可以物質實現。

位模式——是一個集合:8個位構成一個位元組

8個位構成一個位元組,這就是一種位模式。
儲存單元=位元組

進位制的轉換

二進位制數轉換為十進位制數

直接用位權乘以數字相加,第一位是0次冪,小數點往左冪次遞增,往右冪次遞減。
求(1001.101)(2)的十進位制數值。
=120+123+12-1+12-3
=8+1+0.5+0.125=9.625

十進位制數轉換為二進位制數:除二取餘法

來一道題:
除二取餘法

也可以記住一些常用的十進位制和二進位制整數轉換表

轉換表

十進位制小數轉化為二進位制小數?乘二取餘法

首先不斷地對前次得到的積的小數部分乘2,並列出該次得到的整數數值,然後按從前向後的次序排列。該方法簡稱乘2取整法
乘二取餘法
可能會一直很多步,出不來結果,甚至迴圈!
此時要由轉換精度決定。

數字遊戲——二八十六之間的轉換

二進位制是最基本的,八進位制是三位二進位制,十六進位制是四位二進位制

直接上例題,一看就會!
進位制轉換
進位制轉換
二進位制運算
加法減法乘法除法列豎式和十進位制完全一樣

邏輯運算

非、與、或、異或
邏輯運算
異或XOR:就是不一樣的時候,結果才是真。
或非NOR:一樣的時候,結果才是真。

計算機對資料的處理

處理

典例:AD轉換 Analog/Digital

A/D轉換
Sampling取樣 Quantization數字化 Coding編碼
對影象訊號,可以使用矩陣,1黑0白;也可以使用RGB。
對視訊訊號,使用幀frame。

最終,都是要回歸到位模式儲存的。

常用編碼

BCD碼 Binary-Coded Decimal 二-十進位制編碼

使用4位表示一個十進位制數
8421BCD編碼 就是位權分別為8、4、2、1
表示0~9綽綽有餘了。
BCD

壓縮BCD碼:一個位元組分成兩半,每半表示一個十進位制數

非壓縮BCD碼:不拆開,一個位元組表示一個十進位制數

比如,89表示為: (00001000 00001001)BCD

ASCII碼 美國資訊交換標準程式碼

The American Standard Code for Information Interchange

使用7位或8位表示特定的128或256種字元

編碼方案:高三位和低四位

計算機對數字的位模式儲存處理:二進位制 VS ASCII

VS
前一種:二進位制檔案
後一種:ASCII碼檔案文字檔案

辨析:文字檔案指的是?ASCII碼檔案
ASCII碼檔案佔用空間更大

十六進位制表示?只不過是把二進位制多轉換了一下。

漢字常見編碼體系

漢字輸入碼 (外碼): 輸入裝置產生的,你怎麼把這個漢字輸進去

比如,區位碼,國標碼、拼音碼、新全拼、新雙拼、五筆字型碼、簡碼、表形碼、自然碼、智慧ABC漢字輸入碼。

漢字機內碼:用於計算機內部儲存和處理的漢字編碼

用於計算機內部 儲存處理的漢字編碼,通常由國標碼的兩個位元組(最高位置“1”形成)
下面是我的一點理解
要點:什麼叫漢字機內碼?就是機器內部用的編碼!不管你從滑鼠或者別的什麼用的什麼方法輸入的這些漢字,在我計算機裡面,我就用這樣的編碼來記下來你到底輸入的是什麼玩意,在需要處理的時候,我也用我的這個編碼來管理。
機內,計算機內部。幹什麼用?第一,從外部讀入之後存下來:儲存。第二,需要使用這些漢字,處理。
最關鍵的就是,計算機內部,儲存,處理。
外碼和內碼關聯:外碼多種多樣,內碼往往統一。
漢字機內碼每個位元組第一位都是1:為了與ASCII碼區別開來。所以,漢字機內碼會是這個樣子:
1。。。。。。。1。。。。。。。
通過這一點,來一個例題

在記憶體中,若漢字以GB2312的內碼錶示,已知儲存了6個位元組的字串。其十六進位制內容依次為:6AH、B1H、D2H、53H、C8H、B4H,這個字串中有_______個漢字。

解題思路:漢字和ASCII怎麼區分開的?每個位元組第一位都是1的才是漢字。所以,這就很簡單了。
解析

漢字字形碼:用於列印、輸出,確定漢字字形點陣

確定一個漢字字形點陣的編碼,用於漢字顯示和列印輸出。
保留在儲存介質中的全部漢字字形碼稱為字型檔

用16×16點陣儲存2個漢字的字形碼,需要用多少個位元組?

How to? 16×16÷8×2=64

資料校驗碼

奇偶校驗碼 1的個數為奇數
海明校驗碼

數的表示

計算機儲存資料分為定點數和浮點數兩種方式。

定點數

小數點位置固定不變,計算機設計者在機器的結構中指定一個不變的位置。
常用的定點數:定點整數、定點小數

定點整數

小數點固定在最低數值位之後,有一個符號位。
如果參加運算的是小數,需要乘以一個比例因子放大為整數,然後送入計算機。
定點整數

定點小數

表示的都是小數,小數點在最左邊符號位和數值位之間,只能儲存不到1的數。
如果參加運算的數是大於等於1的數,在送入計算機以前,除以一個比例因子,將其縮小為小於1的數。
定點小數
優點:計算簡單方便;缺點:但需要對參加運算的數進行比例因子的計算,增加了額外的計算量。

浮點數

浮點數的統一格式

統一格式
我的理解:
可以看出,分為4部分。
一是符號,整數還是負數。
二是有效數字,也叫尾數,也就是一長串小數。
三是基數,也就是用的幾進位制。
四是階碼,也就是小數點偏離了幾位,才讓有效數字變得很中規中矩。

規格化浮點數

二進位制,
M是純小數,且小數點後面是1。
階碼E是正或負整數
舉例:
舉例
這兩個都是規格化浮點數。前面是定點數。

浮點機器數

浮點機器數

計算機中數的表示

二進位制的四則運算,乘法和除法可以通過加減法實現,因此可以沒有乘除法裝置。

符號數的機器碼錶示

機器數:一個有符號的數在機器中的二進位制表示形式。最高位是符號數,1代表負數,0代表正數。
真值:將帶符號位的機器數轉化為真正數值的形式,就是機器數的真值。
比如:機器數:10000011
真值:-0000011
無符號數:整個機器字長全部二進位制位均表示數值位,相當於數的絕對值。
符號位只是第一位,其餘位都是數值位。

三種表示法

  • 原碼錶示法
  • 反碼錶示法
  • 補碼錶示法

前提:正數原碼、反碼、補碼都是一樣的

原碼錶示法:符號+真值的絕對值

如,5這個數:
+5:0 0000101
-5: 1 0000101

反碼錶示法:負數符號位不動,其餘按位取反

如:5這個數
反碼
+5:0 0000101
-5:1 1111010

補碼錶示法:負數補碼加一

如:5這個數:
補碼
+5:0 0000101
-5: 1 1111011

不得不說的0

負0的反碼全部是1,補碼全部是0。
0

舉例理解

求-1011的補碼,並放入8位的儲存單元中。
儲存單元:位元組
原碼 1000 1011
反碼 1111 0100
補碼 1111 0101

劃重點:補碼計算原數——補碼當原碼,再次求補碼

已知1111 0101是一個補碼,它是負數,反碼就是1111 0100,原碼就是1000 1011。
或者對1111 0101再求補碼:
原碼 1111 0101
反碼 1000 1010
補碼 1000 1011
兩種方法都可以求出來。
補碼加減法
補碼 負數
丟棄最高位,保留符號位,這裡涉及到了溢位的問題。
機器負數計算方法:補碼連同符號位一起取反,末尾加一。
比如:
0000 1011的相反數:1000 1011
它的補碼:1111 0101
全部取反:0000 1010
末尾加一:0000 1011
這樣得到了正數。
原理:先求原碼,也就是求補碼,包括除了符號位以外其他位置按位取反,和末尾加一。第二步是符號位取反,兩步合起來就是這樣了。
我覺得不用去記,知道原理就可以遊刃有餘。

補碼特點

  • 0的機器碼錶示唯一
  • 二進位制加減法都變成了補碼加法
  • 符號位直接參加運算
    這樣,減法器也可以不要了。
    計算

怎樣實現的只有一個加法器,實現所有功能?

只有一個加法器
加減法通過直接補碼加法,乘除法需要進行移位,移位器實現乘除法。邏輯運算需要邏輯運算器。

表示範圍

假設有n位。
碼制比較
原碼:n-1位,每一位都可以表示2n-1個數字,再加上+0和-0,所以一共有-(2n-1-1)~+(2n-1-1)
反碼也是這麼多位,因為原碼反碼互相轉換很方便。
補碼不太一樣,沒有+0和-0的區別,顯然多了一個。10000000,就是它,-128。既當成符號位又當成數值位。

總結

二進位制是計算機採用的基本方式,在0和1構成8位元組位模式中實現所有計算機要做的事情。所有!而原碼反碼補碼等二進位制的實現形式,漢字機內碼BCD碼等碼制,這是計算機能夠實現如此複雜功能的一個重要方面。瞭解二進位制,才能真正接近計算機。