1
考慮以下 C 程式:
執行後程式返回值 (program exit code, 用 echo $?
可得知) 為何?
作答區
(a)
2(b)
1(c)
0(d)
沒定義延伸問題: 查閱相關 C 語言規格解釋,並探討對應的資訊安全問題
2
考慮以下 C 程式:
執行後程式返回值為何?
作答區
(a)
1(b)
2(c)
3(d)
標準沒有定義延伸問題: 查閱相關 C 語言規格解釋,並探討對應的資訊安全問題
3
考慮以下程式碼,預期的 UNIX 終端機輸出為何?
作答區
(a)
1(b)
0(c)
-1(d)
標準沒有定義延伸問題: 從 C 編譯器的角度,解釋為何如此
4
考慮以下 64-bit GCD (greatest common divisor, 最大公因數) 求值函式:
改寫為以下等價實作:
補完以上程式碼。
作答區
K1 = ?
(a)
u(b)
v(c)
u - v(d)
v - u(e)
u & 1(f)
v & 1K2 = ?
(a)
u(b)
v(c)
u - v(d)
v - u(e)
u >> shift(f)
v >> shift(g)
u << shift(h)
v << shift5
承測驗 4
, 透過 gcc 內建的 __builtin_ctz (Returns the number of trailing 0-bits in x, starting at the least significant bit position) 改寫程式碼如下:
補完以上程式碼。
作答區
Z1 = ?
(a)
u(b)
v(c)
u & v(d)
v | u(e)
u & 1(f)
v & 1Z2 = ?
(a)
u(b)
v(c)
u - v(d)
v - u(e)
u >> shift(f)
v >> shift(g)
u << shift(h)
v << shift延伸問題: 解釋上述程式程式運作原理,以及在 x86_64 上透過 __builtin_ctz 改寫 GCD 對效能的提升