大神之路-起始篇 | 第3章.計(jì)算機(jī)科學(xué)導(dǎo)論之【數(shù)據(jù)存儲(chǔ)】學(xué)習(xí)筆記
設(shè)為「?? 星標(biāo)」帶你從基礎(chǔ)入門 到 全棧實(shí)踐 再到 放棄學(xué)習(xí)!
涉及 網(wǎng)絡(luò)安全運(yùn)維、應(yīng)用開(kāi)發(fā)、物聯(lián)網(wǎng)IOT、學(xué)習(xí)路徑 、個(gè)人感悟 等知識(shí)分享。
希望各位看友多多支持【關(guān)注、點(diǎn)贊、評(píng)論、收藏、投幣】,助力每一個(gè)夢(mèng)想。
【WeiyiGeek Blog's - 花開(kāi)堪折直須折,莫待無(wú)花空折枝 】
作者主頁(yè): 【 https://weiyigeek.top 】
博客地址: 【 https://blog.weiyigeek.top 】
作者答疑學(xué)習(xí)交流群:歡迎各位志同道合的朋友一起學(xué)習(xí)交流【點(diǎn)擊 ?? 加入交流群】, 或者關(guān)注公眾號(hào)回復(fù)【學(xué)習(xí)交流群】。
第 2 部分 數(shù)據(jù)的表示和運(yùn)算
描述:該部分包括第2、3和4章,我們分別進(jìn)行如下學(xué)習(xí)。
-
第2章討論了數(shù)字系統(tǒng),數(shù)量如何能使用符號(hào)來(lái)表示。
-
第3章討論了不同的數(shù)據(jù)如何存儲(chǔ)在計(jì)算機(jī)中。
-
第4章討論了一些基本的算術(shù)運(yùn)算與位(邏輯)運(yùn)算。
原文地址: https://mp.weixin.qq.com/s/XmsELA7atGCwDnfIP5yMtw
3.數(shù)據(jù)存儲(chǔ)
描述:計(jì)算機(jī)是一個(gè)可編程的數(shù)據(jù)處理機(jī)器,在進(jìn)行數(shù)據(jù)的存儲(chǔ)學(xué)習(xí)前需要理解數(shù)據(jù)的特性。
3.1 數(shù)據(jù)類型
如今,數(shù)據(jù)以不同形式出現(xiàn),如數(shù)字、文本、音頻、圖像和視頻,而在計(jì)算機(jī)中常常使用多媒體來(lái)定義包含它們。
在其計(jì)算機(jī)內(nèi)部數(shù)據(jù)都是采用統(tǒng)一的數(shù)據(jù)表示法轉(zhuǎn)換后存入計(jì)算機(jī)中(無(wú)需辨別它們表示的是何種數(shù)據(jù)類型),當(dāng)數(shù)據(jù)需要從計(jì)算機(jī)輸出時(shí)在還原回來(lái),此種通用格式稱為位模式。
- 位(bit, binary digit 縮寫) : 存儲(chǔ)在計(jì)算機(jī)中的最小單元,只有 0 或 1(電子開(kāi)關(guān)),其代表設(shè)備的某一狀態(tài)。
- 位模式: 使用其表示數(shù)據(jù)的不同類型,它是一個(gè)序列,有時(shí)被稱為
位流,通常長(zhǎng)度為8的位模式被稱為1字節(jié),例如 16個(gè)位組成的位模式1000 1010 1111 1111(需要16個(gè)電子開(kāi)關(guān))。 - 數(shù)據(jù)壓縮:為了占用較少的(節(jié)約)內(nèi)存空間,數(shù)據(jù)在存儲(chǔ)到計(jì)算機(jī)之前通常需要被壓縮。
- 錯(cuò)誤檢測(cè)和糾正:在傳輸和存儲(chǔ)數(shù)據(jù)時(shí),需要針對(duì)其數(shù)據(jù)進(jìn)行錯(cuò)誤檢測(cè)和糾正。

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

符號(hào)加絕對(duì)值表示法: 在存儲(chǔ)整數(shù)中該方法并不常用,但該格式用于在計(jì)算機(jī)中存儲(chǔ)部分實(shí)數(shù),用符號(hào)加絕對(duì)值格式存儲(chǔ)一個(gè)整數(shù),需要用1個(gè)二進(jìn)制位表示符號(hào)(0表示正,1表示負(fù)), 意味著在一個(gè)8位存儲(chǔ)單元中,可以僅用7位表示數(shù)字的絕對(duì)值(不帶符號(hào))。因此,最大的正數(shù)值僅是無(wú)符號(hào)最大數(shù)的一半。在n位單元可存儲(chǔ)的數(shù)字范圍是 -(2^(n-1)-1) 至 +(2^(n-1)-1).
-
1.存儲(chǔ)有符號(hào)整數(shù): 最左位用于定義整數(shù)的符號(hào)(0表示正整數(shù),1表示負(fù)整數(shù))
例如,使用符號(hào)加絕對(duì)值表示法將+28與-28分別存儲(chǔ)在8位存儲(chǔ)單元中。
+28 = + (11100)2 = 0001 1100
-28 = - (11100)2 = 1000 1100
-
2.符號(hào)加絕對(duì)值表示法的溢出:同無(wú)符號(hào)整數(shù)一樣,有符號(hào)的整數(shù)也會(huì)溢出,并且可能有正負(fù)兩種溢出情況。
例如,當(dāng)使用4位內(nèi)存單元存儲(chǔ)一個(gè)用符號(hào)加絕對(duì)值表示法的整數(shù)時(shí)出現(xiàn)的正負(fù)兩種溢出,當(dāng)我們?cè)噲D存儲(chǔ)一個(gè)比7大的正整數(shù)時(shí),出現(xiàn)正溢出。
-
3.符號(hào)加絕對(duì)值表示法的應(yīng)用:符號(hào)加絕對(duì)值表示法不用于存儲(chǔ)整數(shù),而用于存儲(chǔ)部分實(shí)數(shù),我們后面會(huì)看到,此表示法通常用于釆樣
模擬信號(hào),例如,音頻。

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

IEEE 存儲(chǔ)浮點(diǎn)數(shù)的標(biāo)準(zhǔn)
IEEE 是電氣和電子工程師協(xié)會(huì),定義了幾種存儲(chǔ)浮點(diǎn)數(shù)的標(biāo)準(zhǔn),其中耳熟能詳?shù)挠?code>單精度和雙精度
-
單精度數(shù)格式: 采用總共32位來(lái)存儲(chǔ)一個(gè)浮點(diǎn)表示法的實(shí)數(shù)。符號(hào)占用1位(0為正,1 為負(fù)),指數(shù)占用8位(使用偏移量127),尾數(shù)使用23位(無(wú)符號(hào)數(shù))。該標(biāo)準(zhǔn)有時(shí)稱為余127碼(Excess_127 ),因?yàn)槠屏渴?strong>127。
-
雙精度數(shù)格式: 釆用總共64位來(lái)存儲(chǔ)一個(gè)浮點(diǎn)表示法的實(shí)數(shù)。符號(hào)占用1位(0為正,1 為負(fù)),指數(shù)占用11位(使用偏移量1023 ),尾數(shù)使用52位。該標(biāo)準(zhǔn)有時(shí)稱為余1023碼(Excess_1023 ),因?yàn)槠屏渴?strong>1023。

IEEE 標(biāo)準(zhǔn)浮點(diǎn)數(shù)的存儲(chǔ)
將一個(gè)實(shí)數(shù)可以存儲(chǔ)為IEEE標(biāo)準(zhǔn)浮點(diǎn)數(shù)格式的步驟如下:
- 步驟 1.在S中存儲(chǔ)符號(hào)(0或1 )。
步驟 2.將數(shù)字轉(zhuǎn)換為二進(jìn)制。
步驟 3.規(guī)范化。
步驟 4.找到E和 M的值。
步驟 5.連接S(1位)、E(8位)和M(23位)。
例如,十進(jìn)制5.75余127碼(單精度)表示法。
符號(hào) + S=0
二進(jìn)制: 101.11 (小數(shù)點(diǎn)后連乘法)
規(guī)范化: + (1.0111)2 x 2^2
E和M值: E = 指數(shù) + 余碼 = 2 + 127 = 129 = (10000001)2, M = 尾數(shù) = (0111)2 = 0111 000 ... 000 (在M右側(cè)增加19個(gè)0使之成為23位)
表示法: S E M
存儲(chǔ)數(shù)據(jù): 0 10000001 0111 0000 0000 0000 0000 000
例如,十進(jìn)制-0.0234375余127碼(單精度)表示法。
符號(hào): - S=1
二進(jìn)制: 0.0234375 = 0.0000011
規(guī)范化: - (1.1)*10^-6
E和M值: E = 指數(shù) + 余碼 = -6 + 127 = 121 = (01111001)2, M = 尾數(shù) = (1)2 = 1000 .... 0000 (在M右側(cè)增加22個(gè)0使之成為23位)
表示法: S E M
存儲(chǔ)數(shù)據(jù): 1 01111001 1000 0000 0000 0000 0000 000
IEEE 標(biāo)準(zhǔn)存儲(chǔ)的浮點(diǎn)數(shù)還原
將一個(gè)被IEEE標(biāo)準(zhǔn)存儲(chǔ)的浮點(diǎn)數(shù)還原為原數(shù)字的流程如下:
- 步驟 1)找到S、E和M的值。
步驟 2)如果S=0,將符號(hào)設(shè)為正號(hào),否則設(shè)為負(fù)號(hào)。
步驟 3)找到位移量(E-127).
步驟 4)對(duì)尾數(shù)去規(guī)范化。
步驟 5)將去規(guī)范化的數(shù)字變?yōu)槎M(jìn)制以求出絕對(duì)值。
步驟 6)加上符號(hào)。
例如,將位模式(11001010000000000111000100001111)2以余127碼的格式存儲(chǔ)與內(nèi)存中,請(qǐng)求該數(shù)字原本的十進(jìn)制數(shù)。
# 1.由于是單精度,則首位S,后8位為E,剩下23是M
S E M
1 10010100 00000000111000100001111
# 2.原數(shù)字符號(hào)判斷
S = 1 , 則符號(hào)為負(fù)號(hào)(-)
# 3.求得位移量
E = (10010100)2 - 127 = 148 - 127 = 21
# 4.將二進(jìn)制小數(shù)點(diǎn)前只能為1與尾數(shù)組合拼接獲得規(guī)范化
(1.00000000111000100001111)2 x 2^21
# 5.去規(guī)范化胡獲得二進(jìn)制數(shù)
(1000000001110001000011.11)2
# 6.原本的十進(jìn)制數(shù)并加上符號(hào)
-2 104 378.75
上溢和下溢
對(duì)于浮點(diǎn)數(shù),有上溢和下溢兩種情況,例如使用32位內(nèi)存單元(余127碼)的浮點(diǎn)表示法,該表示法不能存儲(chǔ)很小或很大的絕對(duì)值。
- 如果試圖存儲(chǔ)
絕對(duì)值很小的數(shù)導(dǎo)致下溢的情況。 - 如果試圖存儲(chǔ)
絕對(duì)值很大的數(shù)導(dǎo)致上溢的情況。

零值存儲(chǔ): 當(dāng)有整數(shù)部分和小數(shù)部分的實(shí)數(shù)設(shè)置為零的時(shí)候是0.0時(shí),此時(shí)約定在這種情況下符號(hào)、指數(shù)和尾數(shù)都設(shè)為零。
截?cái)噱e(cuò)誤: 當(dāng)使用浮點(diǎn)表示法存儲(chǔ)實(shí)數(shù)時(shí)存儲(chǔ)數(shù)字的值可能不是我們希望的。例如,假定我們需要在內(nèi)存中用余
127碼表示法存儲(chǔ)這個(gè)數(shù)字:

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

3.3 文字存儲(chǔ)
在任何語(yǔ)言中,文本的片斷是用來(lái)表示該語(yǔ)言中某個(gè)意思的一系列的符號(hào),而在計(jì)算機(jī)中可以用位模式來(lái)表示任何一個(gè)符號(hào),例如
- 使用26個(gè)符號(hào)
(A, B, C,…,Z)來(lái)表示大寫字母 - 使用26個(gè)符號(hào)
(a, b, c, ???, z)表示小寫字母, - 使用10個(gè)符號(hào)
(0, 1, 2,…,9)來(lái)表示數(shù)字字符(不是實(shí)際的數(shù)字,后面將看到它們的不同之處) - 使用單個(gè)符號(hào)
(.,?,:,;,...,!)來(lái)表示標(biāo)點(diǎn)。 - 使用特殊符號(hào)
(如空格、換行和制表符)被用于文本的對(duì)齊和可讀性。
在一種語(yǔ)言中,位模式到底需要多少位來(lái)表示一個(gè)符號(hào)?
答: 這主要取決于該語(yǔ)言集中到底有多少不同的符號(hào),即在一種語(yǔ)言中,表示某一符號(hào)的位模式的長(zhǎng)度取決于該語(yǔ)言中所使用的符號(hào)的數(shù)量。更多的符號(hào)意味著更長(zhǎng)的位模式。
例如,如果要?jiǎng)?chuàng)建的某個(gè)虛構(gòu)的語(yǔ)言僅僅使用大寫英文字母,則只需要26個(gè)符號(hào),相應(yīng)地這種語(yǔ)言的位模式至少需要表示26個(gè)符號(hào),通常每個(gè)字母占用1字節(jié)。
例如,如果對(duì)于中文,可能需要更多的符號(hào),通常每個(gè)文字占有2~4字節(jié)(與字符編碼有關(guān))。
位模式的長(zhǎng)度與符號(hào)的數(shù)量關(guān)系是呈對(duì)數(shù)的(其表達(dá)式為:位模式長(zhǎng)度 = log2符號(hào)數(shù)量),如果需要2個(gè)符號(hào),位模式長(zhǎng)度將是1位(log22=1),如果需要4個(gè)符號(hào),位模式長(zhǎng)度將是2位(log24=2).
- 1位的位模式能表示2種不同的形式:0,1
- 2位的位模式能表示4種不同的形式:00, 01, 10和11

代碼與編碼區(qū)別
- 代碼:不同的位模式集合被設(shè)計(jì)用于表示文本符號(hào),其中每一個(gè)集合我們稱之為代碼。
- 編碼:表示符號(hào)的轉(zhuǎn)換過(guò)程被稱為編碼。
現(xiàn)代計(jì)算機(jī)中常用的編碼如下所示:
- ASCII : 美國(guó)信息交換標(biāo)準(zhǔn)碼,由美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)開(kāi)發(fā),代碼使用7位表示每個(gè)符號(hào),即該代碼可以定義
2^7=128種不同的符號(hào). - Unicode:由硬件和軟件制造商聯(lián)合設(shè)計(jì)的編碼,設(shè)計(jì)代碼使用32位并能表示最大達(dá)
2^32=4 294 967 296個(gè)符號(hào),該代碼不同部分被分配用于表示來(lái)自世界上不同語(yǔ)言的符號(hào),以及表示圖像和特殊符號(hào)。(PS: 如今ASCII是Unicode的一部分) - 其他編碼: 鑒于Unicode的優(yōu)勢(shì),這些編碼變得不太流行,此處簡(jiǎn)單了解即可。
字節(jié)與字符的區(qū)別
- 字節(jié)(Byte):是計(jì)量單位,表示數(shù)據(jù)量多少,是計(jì)算機(jī)信息技術(shù)用于計(jì)量存儲(chǔ)容量的一種計(jì)量單位
- 字符(Character):計(jì)算機(jī)中使用的字母、數(shù)字、字和符號(hào),比如'A'、'B'、'$'、'&'等字符。
現(xiàn)代計(jì)算機(jī)中不同編碼占用的字節(jié)情況(考試中以及在開(kāi)發(fā)中處理中文字符時(shí)會(huì)涉及):
-
符號(hào):英文標(biāo)點(diǎn)為一個(gè)字節(jié),中文標(biāo)點(diǎn)為兩個(gè)字節(jié)。例如:英文句號(hào)占1個(gè)字節(jié)的大小,中文句號(hào)占2個(gè)字節(jié)的大小。
-
ASCII 碼中,一個(gè)英文字母(不分大小寫)為一個(gè)字節(jié),一個(gè)中文漢字為兩個(gè)字節(jié)。
-
Unicode 編碼中,一個(gè)英文為一個(gè)字節(jié),一個(gè)中文為兩個(gè)字節(jié)。
-
UTF-8 編碼中,一個(gè)英文字為一個(gè)字節(jié),一個(gè)中文為三個(gè)字節(jié)。
-
UTF-16 編碼中,一個(gè)英文字母字符或一個(gè)漢字字符存儲(chǔ)都需要 2 個(gè)字節(jié)(Unicode 擴(kuò)展區(qū)的一些漢字存儲(chǔ)需要 4 個(gè)字節(jié))。
-
UTF-32 編碼中,世界上任何字符的存儲(chǔ)都需要 4 個(gè)字節(jié)。
3.4 音頻存儲(chǔ)
音頻表示聲音或音樂(lè),它是隨時(shí)間變化的實(shí)體,我們只能在每一時(shí)刻度量聲音的密度。
音頻本質(zhì)上不同于數(shù)字與文本數(shù)據(jù),音頻是模擬數(shù)據(jù)的例子,即使我們能夠在一段時(shí)間度量所有的值,也不能把它全部存在計(jì)算機(jī)內(nèi)存中,因?yàn)榭赡苄枰獰o(wú)限數(shù)量的內(nèi)存單元。
所以當(dāng)我們討論用計(jì)算機(jī)內(nèi)存存儲(chǔ)聲音時(shí),我們的意思是存儲(chǔ)一個(gè)音頻信號(hào)的密度,例如,每隔一段時(shí)間(一秒鐘,一小時(shí))來(lái)自麥克風(fēng)的信號(hào)。

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

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

本文來(lái)自博客園,作者:全棧工程師修煉指南,轉(zhuǎn)載請(qǐng)注明原文鏈接:http://www.rzrgm.cn/WeiyiGeek/p/17292814.html。
歡迎關(guān)注博主【W(wǎng)eiyiGeek】公眾號(hào)以及【極客全棧修煉】小程序

浙公網(wǎng)安備 33010602011771號(hào)