【深入理解計算機系統】2.資訊的表示和處理

2023-07-12 09:00:57

2.1 資訊儲存

機器級的程式將記憶體視為一個位元組陣列,稱為虛擬記憶體(virtual memory)。記憶體的每個位元組都由一個唯一數位標識,稱為該位元組的地址(address),所有地址的集合稱為虛擬地址空間(virtual address space)。

2.1.1 字

每臺計算機都有一個字長(word size),指明整數和指標資料的標稱大小(norminal size)。虛擬地址就是這麼編碼的,對於32位元字長的計算機,限制了他的虛擬地址空間位232-1位4GB,對於64位元字長的計算機,記憶體最大支援128G。

2.1.2 定址和位元組順序

一個物件儲存有大端法和小端法,最低有效位在最前面的方式被稱為小端法,另一種稱為大端法。許多晶片在加電啟動時確定位元組順序規則。假設有一個0x1234567在地址範圍0x100~0x103儲存,順序如下

 大端法  0x100  0x101 0x102 0x103  
 ...  01  23  45  67 ... 
 小端法  0x100  0x101 0x102 0x103  
 ... 67 45 23  01 ... 

2.1.3 布林代數和環

"~":邏輯運算NOT

"&":邏輯運算AND

" | ":邏輯運算OR

" ^ ":互斥或運算EXCLUSIVE-OR,PQ為真但不全為真時成立

~       & 0 1     | 0 1     ^ 0 1
0 1 0 0 0 0 0 1 0 0 1
1 0 1 0 1 1 1 1 1 1 0

2.1.4 位級運算

C的表示式 二進位制表示式 二進位制結果 C的結果
~0x41 ~[01000001] [10111110] 0xBE
~0x00 ~[00000000] [11111111] 0xFF
0x69&0x55 [01101001]&[01010101] [0100001] 0x41
0x69 | 0x55 [01101001] | [01010101] [01111101] 0x7D
x << k 將x向左移動k位,丟掉k個最高位,右端補k個0

 

2.2 整數表示

一個整數資料型別有 w 位,可以寫成[xw-1, xw-2, ..., x0],可以得到無符號數的二進位制表示形式(式1)

在計算機中希望使用二進位制二補數形式表現有符號數(負數),其中最高位解釋為負權或符號位,正數的原碼、反碼、二補數都相等,負數的反碼是除符號位外取反,二補數等於反碼加1(式2)

數位 原碼 反碼 二補數 直接計算
-10 10001010 11110101 11110110 -1*27+26+25+24+22+21=-10
10 00001010 00001010 00001010 23+21=10

 從這裡理解有符號數和無符號數的對映,有符號數的正數部分對應了無符號數相同大小的正數部分,而有符號數負數的部分對應了更大的無符號數部分,反過來無符號數較大的部分會對應有符號數的負數

對於數位的截斷,如果將一個32位元整數截斷到16位元,會截斷32位元前面的16位元,保留後面的16位元

 

2.3 整數運算

2.3.1 無符號加法

無符號運算可以被視為一種模的運算。例如考慮一個四位數表示,x=9和y=12,[1001]和[1100]。它們的和是21,五位表示為[10101],但如果截斷最高位會得到[0101],也就是5,這和 21 mod 16 = 5一致

2.3.2 二進位制二補數加法

二進位制二補數運算中存在移除情況,根據式2可以很好理解,0111 1111是正數最大值,而1000 0000是負數最小值,所以正數向上溢位後會是最小的負數,而負數向下溢位後是最大的正數

2.3.3 二進位制二補數的非