信息的表示和处理
文章目錄
- 1. 信息存儲
- 2. 整數的表示
learn from 《深入理解計算機系統》
1. 信息存儲
-
大多數計算機,一字節(最小的尋址單元) byte = 8 bits 位
-
C語言中一個指針的值(無論它指向一個整數、一個結構或是某個其他程序對象)都是某個存儲塊的第一個字節的虛擬地址
-
進制轉換:求余法,余數逆序
2n 轉 16 進制:i = n%4, j = n/4, 表示成16進制就是 數字 2i 后面跟 j 個 0
-
字節順序:小端法,大端法,不同的字節順序的機器間發送信息時需要注意這個問題
-
使用 ASCII碼 作為字符碼的任何系統上都將得到相同的結果,與 字節順序 和 字大小規則 無關。因而,文本數據 比 二進制數據 具有更強的平臺獨立性
-
相同的程序,編譯成二進制后,在不同的平臺上基本上是不相同的
-
注意掩碼在不同的機器上都有效,如 ~0xFF 可以把低8位掩蓋,而 0xFFFFFF00 只能在 32 位機器上工作
-
位移操作(算術右移:左側補充最高位)
2. 整數的表示
- 補碼:最高位取 負的權重
- 強制類型轉化:位模式不變,解讀權重的方式變了
- C語言:一個無符號,一個有符號,操作時,會將有符號變為無符號,出現奇怪的現象
- 有符號數字 到 無符號數字 的隱式轉換,會帶來很多看不見的 BUG,避免使用 無符號數
- 乘法的運算代價比加法、位移等代價更高,編譯器會嘗試將乘法轉換為位移和加減法
- -x 等價于 ~x+1
總結
- 上一篇: LeetCode 1822. 数组元素积
- 下一篇: LeetCode 1962. 移除石子使