『普林斯頓最熱門的電腦通識課』資訊的表示法

2024/04/12閱讀時間約 6 分鐘

基礎的資訊表示法,在越高階的程式語言撰寫中,越無法感覺到它的重要性,反正所有變數就一律宣告長整數或雙倍精度浮點數即可,字串都已經有設計好的 API 進行處理,只要知道怎麼用就好。


但越接近硬體層的操作,就要對這些二進制的表示法越熟悉,例如先前我們曾提過的 SIMD 加速指令集,因為要操作暫存器做多位元組的平行處理,因此就要格外注意變數是宣告為幾個位元組的型別,同時也要確認在計算中會不會溢位,另一個特別但又常見的技巧,就是在有符號數及無符號數之間的轉換或運算,這在一些影像處理中,會有特別應用到的地方。


譬如說我們可以用一個位元組來表示無符號的正整數 0 ~ 255,或是有符號的正整數 -128 ~ 127

這在計算機概論中應該都有學過,但有仔細想過為什麼可以這樣表示嗎?

正數和 的二補數就是該數字本身,同時最高位元為 0;負數的最高位元為 ,其二補數則是將其對應正數按位元取反向再加上 1,其範例如下:


高                          低

0 1 1 1 1 1 1 1 = 127

0 0 0 0 0 0 1 0 = 2

0 0 0 0 0 0 0 1 = 1

0 0 0 0 0 0 0 0 = 0

1 1 1 1 1 1 1 1 = −1

1 1 1 1 1 1 1 0 = −2

1 0 0 0 0 0 0 1 = −127

1 0 0 0 0 0 0 0 = −128


於是乎,當我們用無符號的正整數計算到飽和時,再用有符號的正整數做型別轉換,則 255 會被轉換成 -1;根據類似的特性,在一些加速的應用上就可能看到有符號跟無符號數轉來轉去。


同樣重要地,還有 ASCII 跟 Unicode,常有人在應用字串類別時,被這兩種標準碼的轉換搞的暈頭轉向。


當我們應用電腦來處理數位資料變成一種習慣時,就會理所當然的認為這些資料本來就該是數位表示(離散值),殊不知在自然界中的訊號都是類比訊號(連續值),是人類因應電腦計算的方便性,將類比訊號透過「取樣」及「量化」後,才變成數位訊號。


這個轉換過程可以在數位訊號處理的課程中學習如何進行轉換,而在電子產品中,常見所謂的 ADC 轉換器或是 ADC IC,這都是用來將類比訊號轉換成數位訊號的常用元件。


如文中所說的「數位影像」,要將感光陣列中光強所轉化的電荷量變成數位訊號,就需要高速的ADC 來進行訊號處理。

總之,當我們已經習慣用數位資料來表示的時候,也不要忘記真實世界依然是類比連續的。


本章節重點摘要如下:

  • 電腦用三個基本概念來表達資訊:
  1. 電腦是「數位處理器(digital processor)」,它們儲存及處理分批進來的「離散值(discrete values,不連續值)」。
  2. 電腦以「位元」來表達資訊,一個位元是二進位,不是 就是 1
  3. 位元組代表更大的東西。數字、字母、文字、聲音、圖片與電影等,全都是以「位元組」表示。
  • 我們的世界是「類比(analog)」的,意指一個東西的數值平滑地隨著另一個東西的變化而變化;然而,現代技術大多是數位表示,在輸入端就要轉換成數位形式,然後輸出端轉回類比形式。
電腦易於處理數位資料,且數位系統比類比系統更容易延伸擴充。
  • 透過「取樣」跟「量化」技術,類比訊號能夠轉換成數位訊號,以類比照片跟數位照片為例說明:
  1. 類比照片,把化學塗層的底片感光區域曝光於來自被拍攝物體的光線,不同區域接收到不同量的不同顏色,這影響到底片上的染料;拍照後的底片經過複雜的化學流程,顯影及曬印於相紙上,各種量的彩色染料產生不同的顏色。
  2. 數位相片,鏡頭把影像聚焦到位於紅色、綠色及藍色濾鏡後方的矩形感光陣列上,每一個感光區域儲存一個電荷量,這電荷量與感光區域的感光量成比例;這些電荷轉換成數值,相片的數位形式就是代表光強度數值的序列。若感光陣列的數量越多,電荷量的轉換更準確,數位化影像對原始圖像的捕捉就更精確。
  • 有些資訊適合用數位形式表示,例如文字、數字及標點符號等,可以對每一個字母指定一個代表數字,例如 A 是 1是 等。這就是一個很好的數位表示形式。
在標準的表示法中,A 到 Z 是 65 到 90、a 到 z 是97 到 122、0 到 9 是 48 到 57;其它字符如標點符號就是用別的數值代表。這稱為美國資訊交換標準代碼(American Standard Code for Information Interchange, ASCII)。
  • 不同地區或語言有不同交換標準代碼,但現在趨同名為「統一碼 (Unicode)」 的單一標準。
  • 二進制表示,就是 進 1,跟人類常用的十進制有所差異。
數位資訊是用位元 (bit) 表示,這是 binary digit 的縮寫。
  • 由於電腦裡的每個東西都是以二進制來處理,大小與容量之類的屬性往往用 的冪次值來表示。
十進制的 1867 可以轉換成二進制的 11101001011 → 1867 = 2^10 + 2^9 + 2^8 + 2^6 + 2^3 + 2^1 + 2^0。
  • 現代電腦中,處理和記憶組織的基本單位是八個位元,八個位元被當成一個位元組(byte)。一個位元組能編碼 256 個不同值(2^8,全都是 0 和 1 的組合)。
  • 四個位元組可以表示四個 ASCII 字元,或兩個 Unicode 字元。
程式設計師常會用到「十六進制」,因為二進數太長了,其表示方式如下:

0  0000   

1  0001   

2  0010   

3  0011

4  0100   

5  0101   

6  0110   

7  0111

8  1000   

9  1001   

A  1010   

B  1011

C  1100   

D  1101   

E  1110   

F  1111

  • 打造只有兩種狀態 (例如開與關) 的設備相對簡單,例如電流 (流動或不流動)、電壓 (高或低)、電荷 (存在或不存在)、磁力 (北或南)、光線 (亮或暗),反射率 (閃亮或不敏感)。
  • 電腦是以二進制資料進行處理,因此我們才需要了解二進制。 
閱讀可以用最低的成本來獲得別人經驗,培養閱讀能力,一生受益。但要記住,別只讓自己的大腦永遠處於「輸入狀態」,要適當地「輸出」自己的想法。透過閱讀輸入,再利用寫作輸出,就像「費曼學習法」說的一樣,教授到別人能夠了解,自己才算是領悟了這門學問。
留言0
查看全部
發表第一個留言支持創作者!
從 Google News 追蹤更多 vocus 的最新精選內容