目的: 檢驗學員對 bitwise operator
1
考慮以下 C 程式的 align4
巨集的作用是,針對 4-byte alignment,找到給定地址的 round up alignment address。
預期程式輸出 align4(p) is 00001998
作答區
K
= ?
(a)
(-3)
(b)
(-2)
(c)
(-1)
(d)
(0)
(e)
(1)
(f)
(2)
(g)
(3)
延伸題目: 在 Linux 核心原始程式碼找出類似的 alignment 巨集並解釋其作用
2
考慮以下 C 程式可取得以 sizeof(int)
為 alignment 基礎的整數空間,也就是說,當 sizeof(int)
為 4
的時候:
char arr[13];
,INT_SIZE_OF(arr)
要得到 16
;short int s;
,INT_SIZE_OF(s)
要得到 4
作答區
X
= ?
(a)
(-3)
(b)
(-2)
(c)
(-1)
(d)
(0)
(e)
(1)
(f)
(2)
(g)
(3)
Y
= ?
(a)
(-3)
(b)
(-2)
(c)
(-1)
(d)
(0)
(e)
(1)
(f)
(2)
(g)
(3)
延伸題目: 解釋運作原理並在 GitHub 找出實際應用的程式碼
3
考慮以下 C 程式碼:
可改寫為以下等價的程式碼:
請補完程式。
作答區
Z
= ?
(a)
(-3)
(b)
(-2)
(c)
(-1)
(d)
(0)
(e)
(1)
(f)
(2)
(g)
(3)
延伸題目: 舉出 abs 以外,透過 bitwise 操作將原有運算改為 const-time 實作的案例,應當解釋並探討應用場景。