CSAPP 2.2 要求填寫 2^n 的十進制與十六進制值,考察對二進制權重與十六進制緊湊表示的熟悉度。掌握常見 2 的冪次值,能極大加快內存地址、位掩碼、緩衝區大小的心算速度。
| n | 2^n (十進制) | 2^n (十六進制) | 典型應用場景 |
|---|---|---|---|
| 5 | 32 | 0x20 | ASCII 大小寫轉換位、位掩碼 |
| 7 | 128 | 0x80 | 符號位、高位標記 |
| 9 | 512 | 0x200 | 扇區大小、頁表項 |
| 14 | 16,384 | 0x4000 | 16KB 緩衝區、段描述符 |
| 16 | 65,536 | 0x10000 | 64KB 邊界、Unicode BMP 範圍 |
| 17 | 131,072 | 0x20000 | 128KB、大頁對齊 |
| 19 | 524,288 | 0x80000 | 512KB、L2 緩存行 |
2^10 = 1024 ≈ 10^3(Kilo)2^20 = 1,048,576 ≈ 10^6(Mega)2^30 ≈ 10^9(Giga)2^n 只有一個 1,位置為 n/4(整除)處,餘數決定低位:19 ÷ 4 = 4 餘 3 → 第 4 個十六進制位(從 0 計)為 8,其餘為 0 → 0x8 0000 = 0x80000
(addr & (align-1)) == 0,align 通常為 2 的冪。(1u << n) - 1 得到低 n 位全 1。0x200000 即知 2MB(2^21)。建議將 n=0~31 的 2^n 十六進制值全部內化,這是系統級編程的「乘法口訣表」。