《深入理解計算機系統》(第三版)第二章部分知識點總結
資訊的表示和處理
本渣渣要進行CSAPP期中考了,但是上半學期啥也沒聽QWQ,只能臨陣磨槍了
*學習要點*
1、計算機如何表示數字
2、其他形式資料的基本屬性
*資訊儲存*
位元組:最小的可定址的記憶體單位
地址:記憶體中每個位元組都由一個唯一的數字來標識
虛擬地址空間:所有可能地址的集合
字長:指明指標資料的標稱大小(對於一個字長為w的機器而言,虛擬地址的範圍為0~pow(2,w)-1,程式最多訪問pow(2,w)個位元組)
C語言資料型別對應位元組數(32位/64位)
char/unsigned char 1/1
short/unsigned short 2/2
int/unsigned 4/4
long/unsined long 4/8
int32_t/uint32_t 4/4
int64_t/uint64_t 8/8
char* 4/8
float 4/4
double 8/8
排列表示一個物件的位元組有兩種方式:
- 小端法(最低有效位元組在前面)
- 大端法
表示字串:
C語言中字串被編碼為一個以NULL字元結尾的字元陣列。某個字元都由某個編碼標準來表示,最常見的是ASCII字元碼。
布林代數簡介
二進位制值是計算機編碼、儲存和操作資訊的核心
& 與
| 或
~ 非
^ 異或
C語言支援按位進行布林運算
掩碼運算:
掩碼:一個位模式,表示從一個字中選出的位的集合(掩碼是一串二進位制程式碼對目標字串進行按位與運算,遮蔽當前的輸入位)
掩碼0xFF表示一個字的低位位元組(eg : x&0xFF生成一個由x的最低有效位元組組成的值)
~0生成一個全為1的掩碼
C語言中邏輯運算:
所有非零引數都為TRUE,引數零表示FALSE
1表示TRUE,0表示FALSE
C語言中移位運算:
左移:x<<k表示x向左移動k位,丟棄最高的k位,並在右端補k個0
右移:x>>k
- 邏輯右移:在左端補k個0
- 算數右移:在左端補k個最高有效位的值
幾乎所有的計算機/編譯器都對有符號數使用算數右移,同時,對於無符號數,邏輯右移是必須的
*無符號數編碼的定義
*補碼編碼的定義
有符號和無符號之間的型別轉換
對於大多數C語言的實現,處理同樣字長的有符號數和無符號數之間相互轉換的一般規則是:數值可能會改變,但是位模式不變
U2Bw(x):在0<=x<=UMAXw時,給出x的唯一的w位無符號表示
T2Bw(x) :在TMINw<=x<=TMAXw時,給出x的唯一的w位無符號表示
補碼轉化為無符號數:
對滿足TMINw<=x<=TMAXw的x有:
T2Uw(x) = x+pow(2,w), x<0
x, x>=0
無符號數轉化為補碼:
對滿足0<=u<=UMAXw的u有:
U2Tw(u) = u, u<=TMAXw
u-pow(2,w), u>TMAXw
擴充套件一個數字的位表示
零擴充套件:將一個無符號數轉換為一個更大的資料型別時在前面添0
符號擴充套件:新增最高有效位的值1
(剩下的符號太多了,不打了。。。。。。。。)