設為「?? 星標」帶你從基礎入門 到 全堆疊實踐 再到 放棄學習!
涉及 網路安全運維、應用開發、物聯網IOT、學習路徑 、個人感悟 等知識分享,
希望各位看友多多支持【關注、點贊、評論、收藏、投幣】,助力每一個夢想,
【WeiyiGeek Blog's - 花開堪折直須折,莫待無花空折枝 】
作者主頁: 【 https://weiyigeek.top 】
博客地址: 【 https://blog.weiyigeek.top 】
作者答疑學習交流群:歡迎各位志同道合的朋友一起學習交流【點擊 ?? 加入交流群】, 或者關注公眾號回復【學習交流群】,
目錄
- 第 2 部分 資料的表示和運算
- 3.資料存盤
- 3.1 資料型別
- 3.2 數字存盤
- (1) 無/有符號數
- (2) 整數的存盤
- (3) 實數的存盤
- (4) 原碼、反碼、補碼定義計算
- 3.3 文字存盤
- 3.4 音頻存盤
- 3.5 影像存盤
- (1) 光柵圖
- (2) 矢量圖
- 3.6 視頻存盤
- 3.資料存盤
第 2 部分 資料的表示和運算
描述:該部分包括第2、3和4章,我們分別進行如下學習,
-
第2章討論了數字系統,數量如何能使用符號來表示,
-
第3章討論了不同的資料如何存盤在計算機中,
-
第4章討論了一些基本的算術運算與位(邏輯)運算,
原文地址: https://mp.weixin.qq.com/s/XmsELA7atGCwDnfIP5yMtw
3.資料存盤
描述:計算機是一個可編程的資料處理機器,在進行資料的存盤學習前需要理解資料的特性,
3.1 資料型別
如今,資料以不同形式出現,如數字、文本、音頻、影像和視頻,而在計算機中常常使用多媒體來定義包含它們,
在其計算機內部資料都是采用統一的資料表示法轉換后存入計算機中(無需辨別它們表示的是何種資料型別),當資料需要從計算機輸出時在還原回來,此種通用格式稱為位模式,
- 位(bit, binary digit 縮寫) : 存盤在計算機中的最小單元,只有 0 或 1(電子開關),其代表設備的某一狀態,
- 位模式: 使用其表示資料的不同型別,它是一個序列,有時被稱為
位流,通常長度為8的位模式被稱為1位元組,例如 16個位組成的位模式1000 1010 1111 1111(需要16個電子開關), - 資料壓縮:為了占用較少的(節約)記憶體空間,資料在存盤到計算機之前通常需要被壓縮,
- 錯誤檢測和糾正:在傳輸和存盤資料時,需要針對其資料進行錯誤檢測和糾正,

3.2 數字存盤
描述: 在存盤到計算機記憶體中之前,數字被轉換到二進制系統,對于整數的轉換還是非常簡單,而對于小數點,計算機使用兩種不同的表示方法即定點 (把數字作為整數存盤——沒有小數部分) 和 浮點 (把數字作為實數存盤——帶有小數部分),
本節講解的重點,從計算機中有無符號位數的表示和存盤、整數以及實數的表示和存盤、到原碼、反碼、補碼的介紹計算,
(1) 無/有符號數
- 無符號數:即正整數與正實數,
暫存器的位數反映無符號數的表示范圍
8 位 = 2^8 = 1111 1111 (二進制) = 0 ~ 255
16 位 = 2^16 = 1111 1111 1111 1111 (二進制) = 0 ~ 65535
- 有符號數:即負整數與負實數,
符號表示格式:
真值數:帶符號的數,即帶“+”或“-”符號的數為真值,
機器數:符號數字化的數, 即用0,1這種表示正負的數稱為機器數,
例如:下表中帶符號的數與符號數字化的數分別對應,利用符號加絕對值表示法.
| 帶符號的數 | 符號數字化的數 |
|---|---|
| + 0.1011 | 0(.)1011 |
| - 0.1011 | 1(.)1011 |
| + 1100 | 0 1100(.) |
| - 1100 | 1 1100(.) |
溫馨提示:從上之中我們可以看到計算機中是如何存盤負數的,在其值的最高位為符號標志位,其余的為數值位,
(2) 整數的存盤
整數是完整的數字(即沒有小數部分),通常使用定點表示法(此種表示法中,小數點是假定的,但并不存盤)存盤在記憶體中,整數可以被當作小數點位置固定的數字,小數點固定在最右邊,
為了更有效地利用計算機記憶體,無符號和有符號的整數在計算機中存盤方式是不同的,即分為下面三種方法
無符號表示法:其只包括零和正數的非負整數,它的范圍介于0到無窮大之間,該方法可以提高存盤的效率,
- 1.存盤無符號整數:首先將整數變成二進制數,如果二進制位數不足n位,則在二進制數的左邊補0,使它的總位數為n位,如果位數大于n,該整數無法存盤,導致溢位的情況發生,我們后面要討論,
例如,將 7 存盤在 8 位存盤單元中,使用符號表示法
(7)10 = (111)2 = 0000 1111 (左邊加5位0)
-
2.譯解無符號整數: 即輸出設備譯解記憶體中位模式的位串并轉換為一個十進制的無符號整數,可安裝二進制轉換為十進制步驟進行即可,
-
3.溢位問題:存盤單元的位的數量有限制,可以表達整數范圍是有限的,例如,在n位存盤單元中可以存盤的無符號整數僅為0到2^n-1,如果 20 = (10100)2 只保留4位存盤單元的情況下,其結果為 0100 ,因為丟掉了左邊的位,整數顯示為 4 而不是20,
-
4.無符號整數的應用:
計數:當我們計數時,不需要負數,可以從1 (有時0)開始增長,
尋址:有些計算機語言,在一個存盤單元中存盤了另一個存盤單元的地址,地址都是從0 (存盤器的第一個位元組)開始到整個存盤器的總位元組數的正數,在這里同樣也不需要用到負數,因此無符號整數可以輕松地完成這個作業,
存盤其他資料型別:我們后面將談到的其他資料型別(文本、影像、音頻和視頻)是以位模式存盤的,可以翻譯為無符號整數,

符號加絕對值表示法: 在存盤整數中該方法并不常用,但該格式用于在計算機中存盤部分實數,用符號加絕對值格式存盤一個整數,需要用1個二進制位表示符號(0表示正,1表示負), 意味著在一個8位存盤單元中,可以僅用7位表示數字的絕對值(不帶符號),因此,最大的正數值僅是無符號最大數的一半,在n位單元可存盤的數字范圍是 -(2^(n-1)-1) 至 +(2^(n-1)-1).
-
1.存盤有符號整數: 最左位用于定義整數的符號(0表示正整數,1表示負整數)
例如,使用符號加絕對值表示法將+28與-28分別存盤在8位存盤單元中,
+28 = + (11100)2 = 0001 1100
-28 = - (11100)2 = 1000 1100
-
2.符號加絕對值表示法的溢位:同無符號整數一樣,有符號的整數也會溢位,并且可能有正負兩種溢位情況,
例如,當使用4位記憶體單元存盤一個用符號加絕對值表示法的整數時出現的正負兩種溢位,當我們試圖存盤一個比7大的正整數時,出現正溢位,
-
3.符號加絕對值表示法的應用:符號加絕對值表示法不用于存盤整數,而用于存盤部分實數,我們后面會看到,此表示法通常用于釆樣
模擬信號,例如,音頻,

- 二進制補碼表示法: 幾乎所有的計算機都使用二進制補碼表示法來存盤位于n位存盤單元中的有符號整數,例如,如果n是4,該范圍是0000到1111,這個范圍分為兩半:0000到0110以及1000到1111.這兩半按照左負右正的常規互相交換,賦值給負和非負(零和正)整數的位模式,即我們后續需要學習計算機基礎的原碼、反碼、補碼的相關知識(此處先不展開講解),
(3) 實數的存盤
實數是帶有整數部分和小數部分的數字,對于小數點的處理計算機適用定點和浮點 兩種不同的表示方法,
定點表示法: 小數點按約定方式標出,但是盡管固定小數點的表示法(定點)可用于表示實數,但結果不一定精確或達不到需要的精度,所以帶有很大的整數部分或很小的小數部分的實數不應該用定點表示法存盤,
例如,在十進制系統中,假定我們用一種小數點右邊2個數碼,左邊14個數碼,總共16個數碼的定點表示法,那么如果試圖表示十進制數1.002 34,該系統的實數精度就會受損,該系統會把這個數字存盤為1.00.
浮點表示法: 用于維持正確度或精度的解決方法,其允許小數點浮動,即可以在小數點的左右有不同數量的數碼,此種方法極大地增加了可存盤的實數范圍,所以該方法適用于表示帶有很大的整數部分或很小的小數部分的實數,
在浮點表示法中,無論十進制還是二進制,一個數字都由3部分組成,即 符號、位移量、定點數三部分,
- 第一部分是符號,可正可負,
- 第二部分是位移量,顯示小數點應該左右移動構成實際數字的位移量,
- 第三部分是定點數,小數點位置固定的定點表示法,
在稱作科學計數法(浮點表示法)的表示法中, 定點部分在小數點左邊只有1個數碼而且位移量是10的冪次,
例如,使用科學計數法表示十進制數 7 425 000 000 000 000 000 000
# 左邊保留一位整數,將小數點移動到7后,
十進制數:+ 7 425 000 000 000 000 000 000
科學計數法:7.425 x 10^21 (或者 +4.425E21)
例如,使用科學計數法表示數字 -0.000 000 000 000 023 2
# 同樣,此處將小數點移動到首個數碼2后,
十進制數: - 0.000 000 000 000 023 2
科學計數法: - 2.32 x 10^-14 (或者 - 2.32E-14)
例如,使用浮點格式(浮點表示法)表示數字-(0.00000000000000101)2
# 同樣,小數左邊只留一個非零數碼,注意指數作為負的二進制數存盤在計算機中,
二進制數:-(0.0 0000 0000 0000 0101)2
科學計數法: - 1.01 x 2^-14
規范化:為了統一表示法固定部分,科學計數法(用于十進制)和浮點表示法(用于二進制)都在小數點左邊適用唯一非零(0)數碼,
例如,十進制系統中的數碼可能是1~9,而二進制系統中該數碼是1,即
十進制: ± d.xxxxxxxxxxx 其中, d 取值范圍 1-9,x 取值范圍 0-9
二進制: ± 1.yyyyyyyyyyy 其中, y 取值范圍是 0 或 1 ,
符號、指數和尾數: 在一個二進制數規范化之后,只存盤了一個數的三部分資訊:符號、指數和尾數(小數點右邊的位)
- 符號: 一個數的符號可以用一個二進制位來存盤(0或1 ),
- 指數(2的冪): 定義為小數點移動的位數,注意冪可以為正也可以為負,余碼表示法(后面討論)是用來存盤指數位的方法,
- 尾數:是指小數點右邊的二進制數,它定義了該數的精度,尾數是作為無符號整數存盤的,
# 例如,+(1000111.0101)2規范化后變成為:
符號 指數 尾數
+ 2^6 1.0001110101
+ 6 0001110101
溫馨提示: 小數點和定點部分左邊的位1并沒有存盤(即1.),它們是隱含的
溫馨提示:尾數是帶符號的小數部分,像以符號加絕對值表示法存盤的整數那樣對待,
余碼系統: 正的和負的整數都可以作為無符號數存盤,則在余碼系統中的所有整數都是正數,而為了表示正的或負的整數,一個正整數(稱為一個偏移量)加到每個數字中,將它們統一移到非負的一邊,其中偏移量的值計算運算式 2^(m-1)-1, m是記憶體單元存盤指數的大小,
例如,對于4位存盤單元,則其偏移量是 2^(4-1)-1=7,
例如,我們可以用4位存盤單元在數字系統中表示16個整數,使用一個單元作為0,分開其他15個(不等地)我們可以在-7?8的范圍中表示整數,如圖下圖所示,在該范圍中增加7個單位到每個整數中,可以統一把所有整數向右移,使其均為整數而無需改變這些整數的相對位置,避免了相互調整,如圖下圖所示,新系統稱為余7,或者偏移量為7的偏移表示法

IEEE 存盤浮點數的標準
IEEE 是電氣和電子工程師協會,定義了幾種存盤浮點數的標準,其中耳熟能詳的有單精度和雙精度
-
單精度數格式: 采用總共32位來存盤一個浮點表示法的實數,符號占用1位(0為正,1 為負),指數占用8位(使用偏移量127),尾數使用23位(無符號數),該標準有時稱為余127碼(Excess_127 ),因為偏移量是127,
-
雙精度數格式: 釆用總共64位來存盤一個浮點表示法的實數,符號占用1位(0為正,1 為負),指數占用11位(使用偏移量1023 ),尾數使用52位,該標準有時稱為余1023碼(Excess_1023 ),因為偏移量是1023,

IEEE 標準浮點數的存盤
將一個實數可以存盤為IEEE標準浮點數格式的步驟如下:
- 步驟 1.在S中存盤符號(0或1 ),
步驟 2.將數字轉換為二進制,
步驟 3.規范化,
步驟 4.找到E和 M的值,
步驟 5.連接S(1位)、E(8位)和M(23位),
例如,十進制5.75余127碼(單精度)表示法,
符號 + S=0
二進制: 101.11 (小數點后連乘法)
規范化: + (1.0111)2 x 2^2
E和M值: E = 指數 + 余碼 = 2 + 127 = 129 = (10000001)2, M = 尾數 = (0111)2 = 0111 000 ... 000 (在M右側增加19個0使之成為23位)
表示法: S E M
存盤資料: 0 10000001 0111 0000 0000 0000 0000 000
例如,十進制-0.0234375余127碼(單精度)表示法,
符號: - S=1
二進制: 0.0234375 = 0.0000011
規范化: - (1.1)*10^-6
E和M值: E = 指數 + 余碼 = -6 + 127 = 121 = (01111001)2, M = 尾數 = (1)2 = 1000 .... 0000 (在M右側增加22個0使之成為23位)
表示法: S E M
存盤資料: 1 01111001 1000 0000 0000 0000 0000 000
IEEE 標準存盤的浮點數還原
將一個被IEEE標準存盤的浮點數還原為原數字的流程如下:
- 步驟 1)找到S、E和M的值,
步驟 2)如果S=0,將符號設為正號,否則設為負號,
步驟 3)找到位移量(E-127).
步驟 4)對尾數去規范化,
步驟 5)將去規范化的數字變為二進制以求出絕對值,
步驟 6)加上符號,
例如,將位模式(11001010000000000111000100001111)2以余127碼的格式存盤與記憶體中,請求該數字原本的十進制數,
# 1.由于是單精度,則首位S,后8位為E,剩下23是M
S E M
1 10010100 00000000111000100001111
# 2.原數字符號判斷
S = 1 , 則符號為負號(-)
# 3.求得位移量
E = (10010100)2 - 127 = 148 - 127 = 21
# 4.將二進制小數點前只能為1與尾陣列合拼接獲得規范化
(1.00000000111000100001111)2 x 2^21
# 5.去規范化胡獲得二進制數
(1000000001110001000011.11)2
# 6.原本的十進制數并加上符號
-2 104 378.75
上溢和下溢
對于浮點數,有上溢和下溢兩種情況,例如使用32位記憶體單元(余127碼)的浮點表示法,該表示法不能存盤很小或很大的絕對值,
- 如果試圖存盤
絕對值很小的數導致下溢的情況, - 如果試圖存盤
絕對值很大的數導致上溢的情況,

零值存盤: 當有整數部分和小數部分的實數設定為零的時候是0.0時,此時約定在這種情況下符號、指數和尾數都設為零,
截斷錯誤: 當使用浮點表示法存盤實數時存盤數字的值可能不是我們希望的,例如,假定我們需要在記憶體中用余
127碼表示法存盤這個數字:

由上圖可知小數部分右邊的3個1被截掉了,這種原始數字與還原后數字的差異稱為截斷錯誤,在使用很小或很大數字的地方,如宇航業的計算中,這種型別的錯誤是很嚴重的,這種情況下, 我們需要更大的記憶體單元 (例如,64位,雙精度) 和 其他的表示法,為此IEEE定義了用于更大尾數的其他表示法,
(4) 原碼、反碼、補碼定義計算
描述:說到計算機資料的表示和存盤,不得不提到原碼、反碼、補碼,
-
原碼:二進制定點表示法, 即最高位為
符號位0 表示正, 1 表示負, 其余位表示數值位大小,比如 (0 000 0111) B= 7 而 (1 000 0111) B = -7 -
反碼:正數的反碼與其原碼相同, 負數的反碼時對其原碼逐位取反(符號位除外)
-
補碼:正數的補碼與其原碼相同, 負數的補碼是在其反碼的末尾加1,或者在原碼減1在取反也是可以的(
計算機中通常是使用補碼來存放負數的),
計算機中的原碼、反碼和補碼快速計算了解(重點):
| [八位暫存器] | 數值 1 | 數值 -1 | 數值 1 +(-1)= 0 |
|---|---|---|---|
| 原碼 | 0 000 0001 | 1 000 0001 (符號位為 1) | 1 000 0010 = (0 000 0001 + 1 000 0001) = -2 |
| 反碼 | 0 000 0001 | 1 111 1110 (符號位不變,按位取反) | 1 111 1111 = (0 000 0001 + 1 111 1110) = - 0 |
| 補碼 | 0 000 0001 | 1 111 1111 (反碼+1) | 0 000 0000 = (1111 1111 + 0000 0001) = 1 0000 0000 (八位暫存器取只取后八位) |
溫馨提示:
原碼在表示數字0時,有兩種方式表達
(0000 0000)B = 0與(1000 0000)B = -0,所以顯然使用原碼來表示數值正負不合適,反碼在表示數字0時,也有兩種方式表達
(0000 0000)B = 0與(1111 1111)B = -0,所以顯然使用反碼來表示數值正負也是不合適,補碼在進行計算0時,可以在
數值位減1再取反或者在數值位取反后再加1也是可以的,其結果表示是精確的,所以顯然使用反碼來表示數值正負是非常合適的,并且計算機默認是使用補碼來表示數值的(重點),
溫馨提示:如果將符號位 與 數值位 在運行時進行對其分離,但是這樣做會增加ACC累加器設計開銷過大,
舉例,求數值 7 與 - 7 的原碼、反碼、補碼的二進制表示(八位暫存器),
數值 7 | 數值 -7
原碼 0 000 0111 | 1 000 0111
反碼 0 000 0111 | 1 111 1000
補碼 0 000 0111 | 1 111 1001
計算機中的原碼、反碼和補碼取值范圍:
| 定點整數 | 定點小數 | |
|---|---|---|
| 原碼 | -(2^(n-1) - 1) ~ 2^(n-1) - 1 | -1 < x < 1 |
| 反碼 | -(2^(n-1) - 1) ~ 2^(n-1) - 1 | -1 < x < 1 |
| 補碼 | -2^(n-1) ~ 2^(n-1) - 1 | -1 <= x < 1 |
溫馨提示:定點小數精確的表示范圍應該是,原碼為 -1 * (1 - 2^-(N-1)) ~ 1 - 2^-(N-1) ,其補碼為 -1 ~ 1 - 2^-(N-1).
原碼表示法公式(原理)
- 整數定義
- 小數定義
整數原碼計算示例:如 15 與 - 15 數的表示流程,
數值 = 15 -> x = + 1111 -> [x]原 = 0,1111
數值 = - 15 -> x = - 1111 -> [x]原 = 2^4 - (- 1111) = 1 0000 + 1111 = 1,1111
如果是八位暫存器就為 1000 1111 ,
Tips: 其中整數位數為4位,并且使用(逗號)將符號位與數值部分隔開,
小數原碼計算示例:例如 0.15 與 - 0.15 數的表示流程,
數值 = 0.15 -> x = + 0.1111 -> [x]原 = 0.1111
數值 = - 0.15 -> x = - 0.1111 -> [x]原 = 1 - (- 0.1111) = 1 + 0.1111 = 1.1111
Tips: 其中整數位數為4位.,并且使用(小數點)將符號位與數值部分隔開,
原碼特點: 表示簡單直觀但是在使用原碼做加法時,會出現結果符號可正可負的問題,
正數的原碼符號位為0;數值位為其真值
負數的原碼符號位為1;數值位為其真值
補碼表示法公式(原理)
- 整數定義
- 小數定義
整數補碼計算示例:如 15 與 - 15 數的表示流程,
數值 = 15 -> x =1111 -> [x]補 = 0,1111
數值 = -15 -> x = - 1111 -> [x]補 = 2^(4+1) + (- 1111) = 10 0000 - 1111 = 1 0001
八位補碼形式:1111 0001
64位補碼形式:1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 0001
正數的補碼符號位為0;數值位為其真值
負數的補碼符號位為1;數值位為其真值對應位求反后末位加1
反碼表示法公式(原理)
- 整數定義
- 小數定義
整數反碼計算示例:如 15 與 - 15 數的表示流程,
數值 = 15 -> x = + 1111 -> [x]反 = 0,1111
數值 = -15 -> x = - 1111 -> [x]反 = ( 2^(4+1) - 1 ) + (- 1111) = 1 1111 - 1111 = 1 0000
八位反碼形式:1111 0000
64位補碼形式:1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 0000
小數反碼計算示例:求 - 13 / 64 的反碼
-(8 + 4 + 1) / 64 = - ( 1/8 + 1/16 + 1/64) = -(2^3 + 2^4 + 2^6) = - (0.001101)2 = 1.110010 (反碼)
解釋:
1/8= 2^-3 化為2進制為 (0.001)2 ,1/16= 2^-4 化為2進制為(0.0001)2 ,1/64= 2^-6 化為2進制為 (0.000001)2
正數的補碼符號位為0;數值位為其真值
負數的補碼符號位為1;數值位為其真值對應位求反
移碼表示法公式(原理)
計算步驟:
- 方法一(簡單):在補碼的基礎上,符號位取反
- 方法二:[e]移 = 2^k + e , -2^k <= e <= 2^k
整數移碼計算示例:如 9 與 - 9 數的表示流程,
- x = + ( 1001 )2 , [x]補 = ( 01001 )2,[x]移 = ( 11001 )2
- x = - ( 1001 )2 , [x]反 = ( 10110 )2,[x]補 = ( 10111 )2,[x]移 = ( 00111 )2
舉例,求 - 13 / 64 的補碼
-13/64=(-0.001101)2,[x]反=1.110010 ,[x]補=1.110011 ,[x]移=0.110011
有整數和小數部分組合形成的數值
描述:十進制數轉換為任意進制數 , 通常采用基數相乘法,對整數部分用除基取余法,對小數部分用乘基取整法,最后將整數和小數拼接在一起,
例如,將十進制數123.6875轉換成二進制數,最終結果為 (1111011.1011)2
# 整數部分 -> 除基取余法
123 % 2 = 1 # 最低位
61 % 2 = 1
30 % 2 = 0
15 % 2 = 1
7 % 2 = 1
3 % 2 = 1
1 % 2 = 1 # 最高位
# 結果 : 0111 1011 (八位暫存器,左邊補0)
# 小數部分 -> 乘基取整法
0.6875 * 2 = 1 # 最高位
= 1.3750
0.3750 * 2 = 0
= 0.7500
0.7500 * 2 = 1
= 1.5000
0.5000 * 2 = 1 # 最低值
= 1.0000
# 結果 : 1011
溫馨提示:小數和整數不一樣,整數可以連續表示,但小數是離散的,二進制的小數只能表示 1/2, 1/4, ……, 1/2n, 因此無法表示所有的十進制小數,
溫馨提示:整數與小數的二進制最高位都在最左邊,
而在將整數和小數轉換成為八進制或者十二進制時,在轉換時應以小數點為界,
整數部分:在從小數點開始往左數,將一串二進制數分為3位(八進制)一組或4位(十六進制)一組,在數的最左邊可根據需要加“0”補齊;(左補齊)
小數部分,從小數點開始往右數,也將一串二進制分為3位一組或4位一組,在數的最右邊也可以根據需要加“0”補齊,(右補齊)
最終使總的位數為3或4的整數倍,然后分別用對應的八進制數或十六進制數取代;
例: 將二進制數 1111000010.01101 分別轉換為八進制數和十六進制數,
# 1111000010.01101 => 八進制
[00]1 111 000 010.011 01[0] # 左補齊兩個00,右補齊一個0
1 7 0 2 3 2 => (1702.32)O
# 1111000010.01101 => 十六進制
[00]11 1100 0010.0110 1[000] # 左補齊兩個00,右補齊三個000
3 C 2 6 8 => (3C2.68)H
三種機器數小結
- 最高位為符號位,書寫上用
,(整數)或.(小數)將數值部分和符號位隔開, - 對于正數,原碼=補碼=反碼,
- 對于負數,符號位為1,其數值部分原碼除符號位外每位
按位取反末尾加1就為補碼,如果不加一就為反碼, - 計算機里一般使用補碼表示負數,例如,數值-15的二進制數為 1111 0001(8位暫存器),
- [y]補 連同符號在內,每位取反,末位加1,即得 [-y] 補,例如 -5 的補碼為 1111 1011 (8位暫存器),
- 如下圖所顯示無符號、符號絕對值、二進制補碼等表示法的對比,例如,使用4位存盤單元以存盤0?15之間的無符號整數, 存盤單元可以存盤-8?+7之間的二進制補碼整數,

3.3 文字存盤
在任何語言中,文本的片斷是用來表示該語言中某個意思的一系列的符號,而在計算機中可以用位模式來表示任何一個符號,例如
- 使用26個符號
(A, B, C,…,Z)來表示大寫字母 - 使用26個符號
(a, b, c, ???, z)表示小寫字母, - 使用10個符號
(0, 1, 2,…,9)來表示數字字符(不是實際的數字,后面將看到它們的不同之處) - 使用單個符號
(.,?,:,;,...,!)來表示標點, - 使用特殊符號
(如空格、換行和制表符)被用于文本的對齊和可讀性,
在一種語言中,位模式到底需要多少位來表示一個符號?
答: 這主要取決于該語言集中到底有多少不同的符號,即在一種語言中,表示某一符號的位模式的長度取決于該語言中所使用的符號的數量,更多的符號意味著更長的位模式,
例如,如果要創建的某個虛構的語言僅僅使用大寫英文字母,則只需要26個符號,相應地這種語言的位模式至少需要表示26個符號,通常每個字母占用1位元組,
例如,如果對于中文,可能需要更多的符號,通常每個文字占有2~4位元組(與字符編碼有關),
位模式的長度與符號的數量關系是呈對數的(其運算式為:位模式長度 = log2符號數量),如果需要2個符號,位模式長度將是1位(log22=1),如果需要4個符號,位模式長度將是2位(log24=2).
- 1位的位模式能表示2種不同的形式:0,1
- 2位的位模式能表示4種不同的形式:00, 01, 10和11

代碼與編碼區別
- 代碼:不同的位模式集合被設計用于表示文本符號,其中每一個集合我們稱之為代碼,
- 編碼:表示符號的轉換程序被稱為編碼,
現代計算機中常用的編碼如下所示:
- ASCII : 美國資訊交換標準碼,由美國國家標準協會(ANSI)開發,代碼使用7位表示每個符號,即該代碼可以定義
2^7=128種不同的符號. - Unicode:由硬體和軟體制造商聯合設計的編碼,設計代碼使用32位并能表示最大達
2^32=4 294 967 296個符號,該代碼不同部分被分配用于表示來自世界上不同語言的符號,以及表示影像和特殊符號,(PS: 如今ASCII是Unicode的一部分) - 其他編碼: 鑒于Unicode的優勢,這些編碼變得不太流行,此處簡單了解即可,
位元組與字符的區別
- 位元組(Byte):是計量單位,表示資料量多少,是計算機資訊技術用于計量存盤容量的一種計量單位
- 字符(Character):計算機中使用的字母、數字、字和符號,比如'A'、'B'、'$'、'&'等字符,
現代計算機中不同編碼占用的位元組情況(考試中以及在開發中處理中文字符時會涉及):
-
符號:英文標點為一個位元組,中文標點為兩個位元組,例如:英文句號占1個位元組的大小,中文句號占2個位元組的大小,
-
ASCII 碼中,一個英文字母(不分大小寫)為一個位元組,一個中文漢字為兩個位元組,
-
Unicode 編碼中,一個英文為一個位元組,一個中文為兩個位元組,
-
UTF-8 編碼中,一個英文字為一個位元組,一個中文為三個位元組,
-
UTF-16 編碼中,一個英文字母字符或一個漢字字符存盤都需要 2 個位元組(Unicode 擴展區的一些漢字存盤需要 4 個位元組),
-
UTF-32 編碼中,世界上任何字符的存盤都需要 4 個位元組,
3.4 音頻存盤
音頻表示聲音或音樂,它是隨時間變化的物體,我們只能在每一時刻度量聲音的密度,
音頻本質上不同于數字與文本資料,音頻是模擬資料的例子,即使我們能夠在一段時間度量所有的值,也不能把它全部存在計算機記憶體中,因為可能需要無限數量的記憶體單元,
所以當我們討論用計算機記憶體存盤聲音時,我們的意思是存盤一個音頻信號的密度,例如,每隔一段時間(一秒鐘,一小時)來自麥克風的信號,

采樣、量化、編碼
計算機中要存盤音頻的需要進行采樣、量化、編碼等關鍵操作步驟:
采樣: 我們需要在模擬信號上選擇數量有限的點來度量它們的值并記錄下來,例如上圖中音頻信號我們選擇10個樣本,我們可以記錄這些值來表現模擬信號,
Q: 下一個邏輯問題是我們每秒鐘需要多少樣本才能還原出原始信號的副本?
如果信號是平坦的,則需要很少的樣本;如果信號變化劇烈,則需要更多的樣本,所以說樣本數量依賴于模擬信號中變化的最大數量,
采樣率:通常每秒40 000個樣本的釆樣率對音頻信號來說是足夠好的,
量化: 指的是將樣本的值截取為最接近的整數值的一種程序(可以理解為四舍五入),從每個樣本測量來的值是真實的數字, 為每個樣本使用一個無符號的數(位模式)會更簡便,所以需要針對其進行量化,
例如,如果實際的值為17.2,就可截取為17; 如果值為17.7,就可截取為18,
編碼:量化的樣本值需要被編碼成位模式,某一些系統為樣本賦正值或負值,另一些僅僅移動曲線到正的區間從而只賦正值,換言之,一些系統使用無符號整數來表示樣本,而另一些使用有符號的整數來做,
-
毎樣本位: 對于每個樣本系統需要決定分配多少位 ,每樣本位的數量有時稱為位深度,盡管在過去僅有8位分配給聲音樣本,現在每樣本16、24甚至32位都是正常的,
-
位率:如果我們稱位深度或每樣本位的數量為B,每秒樣本數為S,我們需要為每秒的音頻存盤SxB位,該乘積有時稱為位率R,
例如,如果我們使用每秒40 000個樣本以及每樣本16 位,位率是R=40 000 x 16=640 000 b/s=640 KB/s,
聲音編碼標準
當今音頻編碼的主流標準是MP3 (MPEG Layer3的簡寫,它是用于視頻壓縮方法的MPEG (動態影像專家組)標準的一個修改版),除此之外還有AAC 、AC-3、AMR、WMA、ALAC、APE、FLAC、PCM、DSD、WAV、AIFF、MIDI等主流音頻編碼格式決議,
- MP3 : 最通用最常見的格式, 它采用每秒44 100個樣本以及每樣本16 位, 結果信號達到705 600 b/s的位率,再用去掉那些人耳無法識別的資訊的壓縮方法進行壓縮, (有損壓縮)
- AAC : 高級音頻編碼(Advanced Audio Coding)的縮寫,是新一代的音頻有損壓縮技術,在蘋果設備上是最為常用的格式,其格式后綴名有
aac,mp4,m4a三種,(有損壓縮) - AC-3:數字音頻壓縮標準 (Digital Audio Compression Standard)音頻編碼格式,是傳說中的杜比實驗室的杰作,著名的有損資料壓縮的多媒體儲存格式, 可以包括多達6個獨立的聲道,其最知名的是5.1聲道技術,(有損壓縮)
- AMR:自適應多速率(Adaptive Multi-Rate)壓縮音頻編碼格式,是一個使語音編碼最優化的專利,專用于有效地壓縮語音頻率, 主要用于移動設備的音頻壓縮,壓縮比非常高,但是音質比較差,主要用于語音類的音頻,(有損壓縮)
- WMA: (Windows Media Audio),它是微軟公司推出的與MP3格式齊名的一種新的音頻格式,由于WMA在壓縮比和音質方面都超過了MP3,在較低的采樣頻率下也能產生較好的音質,其后綴名為
.wma, 但這種格式通常只能使用 Windows 自帶的 MediaPlayer 來播放,與純音頻的媒體串流格式.ASF 類似,(無損壓縮) - ALAC: (Apple Lossless Audio Codec) 蘋果的無損音頻壓縮編碼格式,ALAC與MP3的主要分別在于編碼程序中,MP3會取消小部分高頻及低頻部分的音頻資料,而ALAC則會如實記錄,不會洗掉音頻中任何細節資料,(無損壓縮)
- APE:它是Monkey’s Audio 公司提供的一種無損壓縮音頻格式,它可以通過無損壓縮技術使龐大的 WAV 檔案壓縮掉近一半而基本不怎么損失音質,并且這個格式是完全的免費和開源,(無損壓縮)
- FLAC:損音頻壓縮編碼(Free Lossless Audio Codec,FLAC是一種著名的自由音頻壓縮編碼,其特點是無損壓縮,不同于其他有損壓縮編碼如MP3 及AAC,它不會破壞任何原有的音頻資訊,其后綴格式為
.flac,(無損壓縮) - PCM: 脈沖編碼調制(Pulse Code Modulated Audio),是目前計算機應用中最高保真水平的音頻編碼格式,PCM音頻資料是未經壓縮的音頻采樣資料裸流,它是由模擬信號經過采樣、量化、編碼轉換成的標準的數字音頻資料,通常CD唱片都采用此格式,(無壓縮)
- DSD:直接位元流數字(Direct Stream Digital)相對于PCM的最大優勢是,具有極小的量化噪聲, 超高的信噪比,這是音樂發燒友才會玩的格式,(無壓縮)
- WAV:是微軟公司(Microsoft)開發的一種聲音檔案格式,它是最接近無損的音樂格式,所以檔案大小相對也比較大,也是很多音頻處理軟體默認保存的音頻格式,(無壓縮)
- AIFF:音頻交換檔案格式(Audio Interchange File Format)的英文縮寫,是Apple公司開發的一種聲音檔案格式,是為了對抗微軟的WAV而開發,(無壓縮)
- MIDI(Musical Instrument Digital Interface)格式被經常玩音樂的人使用,MIDI允許數字合成器和其他設備交換資料,最大作用在于用電腦音樂作曲,所以它并不是錄制的聲音而是制作出的聲音,其后綴格式為
.mid,(無壓縮)
3.5 影像存盤
在計算機中存盤影像使用兩種不同的技術:光柵圖或矢量圖,
(1) 光柵圖
當我們需要存盤模擬影像(如照片)時,就用到了光柵圖(或位圖),一張照片由模擬資料組成,不同的是資料密度(色彩)因空間變化,而不是因時間變化,同樣需要針對其樣本資料進行采樣(掃描),
樣本稱為像素(代表影像元素),換言之,整個影像被分成小的像素,每個像素假定有單獨的密度值,
1.決議度: 在影像處理中的掃描率稱為決議度,如果決議率足夠高,人眼不會看出在重現影像中的不連續,
2.色彩深度: 用于表現像素的位的數量,即色彩深度,依賴于像素的顏色是如何由不同的編碼技術來處理的,我們的眼睛有不同型別的感光細胞,一些回應紅、黃、藍三原色(也叫RGB), 而另一些僅僅回應光的密度,
-
真彩色:用于像素編碼的技術之一稱為真彩色,它使用24位來編碼一個像素(可以表達 16777216 種顏色),在該技術中每個三原色(RGB)都表示為8位,所以每種色彩都由0?255之間的三維數字表示,
-
索引色:索引色(或調色板色)模式僅使用
真彩色里其中的一部分,因為真彩色模式使用了超過1600萬種的顏色,許多應用程式不需要如此大的顏色范圍,在該模式中每個應用程式從大的色彩集中選擇一些顏色(通常是256種)并對其建立索引,對選中的顏色賦一個0?255之間的值,對索引的使用減少了需要存盤一個像素所需要的位的數量,(PS: 類似藝術家可能在他們的畫室用到很多種顏色,但一次僅用到他們調色板中的一些,)例如,真彩模式需要24位來儲存一個像素,索引色模式通常使用256個索引,這需要8位來存盤同樣的像素,
例如,一部高質量的數碼相機要用幾乎3百萬像素拍攝一張3X5英寸的相片,
真彩色模式存盤所需要的位的數量:3 000 000 x 24 = 72 000 000
索引色模式存盤所需要的位的數量:3 000 000 x 8 = 24 000 000

3.影像編碼標準
在計算機中常用的影像編碼的標準是JPEG、PNG、GIF等
-
JPEG(Joint Photographic Experts Group):是JPEG標準的產物,該標準由國際標準化組織(ISO)制訂,是面向連續色調靜止影像的一種壓縮標準,使用真彩色模式,使用壓縮影像來減少位的數量,常用格式后綴名為
.jpg或.jpeg -
PNG(Portable Network Graphics):便攜式網路圖形,是一種采用無損壓縮演算法的位圖格式,支持索引、灰度、RGB三種顏色方案以及Alpha通道等特性.
-
GIF (Graphics Interchange Format):圖形交換格式,它是一種位圖,使用索引色模式,
溫馨提示:光柵圖有兩個缺點,即檔案體積太大和重新調整影像大小有麻煩,放大光柵影像意味著擴大像素,所以放大后的影像看上去很粗糙,
擴展知識: 一個位元組8位元,像素通常表示位圖(bitmap)中的一個點,
- 對于 黑白影像(二值影像)一個詳像素用一個bit表示,所以1位元組表示8像素
- 對于 灰度圖,一個像素為 256 種狀態正好2的8次方,因此1位元組表示1像素
- 對于 RGB 圖,一個像素為 256 x 256 x 256 種狀態正好2的24次方,因此3位元組表示1像素
(2) 矢量圖
矢量圖影像編碼方法并不存盤每個像素的位模式,一個影像被分解成幾何圖形的組合,
矢量圖是由定義如何繪制這些形狀的一系列命令構成的,當要顯示或列印影像時,將影像的尺寸作為輸入傳給系統,于此同時系統會重新設計影像的大小并用相同的公式畫出影像,所以每次繪制影像時公式也將重新估算一次,因此矢量圖也稱為幾何模型或面向物件圖形,
矢量圖適合應用程式采用主要的幾何元素來創建影像,它用于諸如Flash這樣的應用程式,以及創建TrueType (微軟、蘋果公司)和PostScript (Adobe公司)字體,計算機輔助設計(CAD)也使用矢量圖進行工程繪圖,
例如,線段、矩形或圓形,每個幾何形狀由數學公式表達,
例如,線段可以由它端點的坐標描述,圓可以由它的圓心坐標和半徑長度來描述,
例如,使用矢量圖繪制出半徑為r的圓形,程式需要繪制該圓的主要資訊如下:
- 一個圓的半徑r,
- 圓心的位置,
- 繪制的線型和顏色,
- 填充的型別和顏色,
溫馨提示:當該圓的大小改變時,程式改變半徑的值并重新計算這些資訊以便再繪制一個圓,改變影像大小不會改變繪圖的質量,
溫馨提示:矢量圖不適合存盤照片影像的細微精妙,推薦使用JPEG或GIF光柵圖提供了更好和更生動的圖片,
3.6 視頻存盤
視頻是影像(稱為幀)在時間上的表示,一部電影就是一系列的幀一張接一張地播放而形成運動的影像,換言之,視頻是隨空間(單個影像)和時間(一系列影像)變化的資訊表現,
所以在計算機中我們也就知道如何儲存視頻,它將每一幅影像或幀轉化成一系列位模式并儲存,將這些影像組合起來就可表示視頻,
溫馨提示:現在視頻通常是被壓縮存盤的,常常使用的*MPEG*(Moving Picture Experts Group,動態影像專家組)技術針對常視頻進行壓縮,
原文地址: https://blog.weiyigeek.top/2022/6-2-694.html
本文至此完畢,更多技術文章,盡情期待下一章節!
專欄書寫不易,如果您覺得這個專欄還不錯的,請給這篇專欄 【點個贊、投個幣、收個藏、關個注,轉個發,留個言】(人間六大情),這將對我的肯定,謝謝!,
點擊 ?? 關注「 全堆疊工程師修煉指南」公眾號
微信溝通交流: weiyigeeker (點擊添加)
交流溝通群:629184198 或 關注公眾號回復【學習交流群】
溫馨提示: 由于作者水平有限,本章錯漏缺點在所難免,希望讀者批評指正,并請在文章末尾留下您寶貴的經驗知識,聯系郵箱地址 [email protected] 或者關注公眾號 WeiyiGeek 聯系我,

本文來自博客園,作者:全堆疊工程師修煉指南,轉載請注明原文鏈接:https://www.cnblogs.com/WeiyiGeek/p/17292814.html,
歡迎關注博主【WeiyiGeek】公眾號以及【極客全堆疊修煉】小程式
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/549323.html
標籤:其他
上一篇:Sickos1_1
