標籤:sig font 分享 images 多位元組 src 操作 位元組 邏輯
三種重要的數字表示:無符號 、 補碼 、 浮點數。
【一】資訊儲存
最小單位是位元組, 在作業系統層面,只需要關注地址。系統將儲存空間空間劃分為更可管理的單元,存放不同的程式對象(程式資料、指令、控制資訊)
1、16進位標記法:用兩個16進位字元表示一個位元組,00 - FF。 練習:16進位、10進位、2進位的相互轉換。
2、字: 字長決定虛擬位址空間的最大大小。32位電腦虛擬位址空間為 2^32個,即4GB
3、資料大小:整數short2/int4/long一字/longlong8,浮點數float4/double8, char1, char *一字
4、定址和位元組順序:多位元組對象的規則:地址+如何排列。
小端法:前面的地址存放小的位,後面的地址存放大的位、大端法相反
可能用到的情境:1、網路傳輸位元據。2、反組譯碼:從指令位元組級表示到組譯工具 3、強制類型轉換
5、表示字串:結尾為0x00(null, ascii碼為0),文本資料比位元據平台獨立性更好
6、表示代碼:二進位編碼不相容。
7、c中位元運算:~ | & ^,常見用法:自己與自己做異或,得到的是自身。掩碼運算。
8、c中邏輯運算:&& || !,
9、c中移位元運算:左移 << 右移:
邏輯右移:左端補0
算術右移:左端補最高位,
無符號資料是邏輯右移,有符號資料,算數右移。
【整數表示】
有符號數第一位是負的 2^(n-1),
有符號和無符號的切換:
c中有符號數和無符號數運算,有符號數自動轉換為無符號數!
這一點很坑,最好的解決方案是永遠不用無符號數。
擴充數位位表示:無符號零擴充,有符號符號擴充(類似邏輯右移)
【整數運算】
1、無符號加法:
2、有符號加法:
3、補碼的非
4、無符號乘法
5、補碼乘法
高位不一致,低位是相同處理方式的。
6、乘以常數:乘法運算通常需要10個以上刻度,但是乘以常數可以通過移位和加法運算來代替。
例如:14 = 2 + 2^2 + 2^3,那麼x*14 = (x << 3) + (x << 2) + (x<<1)
7、除以2的冪:邏輯右移、算術右移 + 偏置(之後再看)
【浮點數】
IEEE標準
1、二進位小數:與十進位小數機制類似
2、IEEE浮點表示:sign + exp + frac:
exp: 無符號數 - 偏置量 (偏置量為 2^(k-1) -1 )
float: 1 + 8 + 23
double: 1 + 11 + 52
3、舍入與浮點運算(待填坑)
【CSAPP】二、資訊的表示和處理