owned this note changed 7 years ago
Linked with GitHub

2018q1 Homework2 (assessment)

contributed by < catpig1630 >

第一題

第 1 週測驗題測驗3

在 C 程式中,表達式 1 << 2 + 3 << 4 求值後為何?
(a) 512
(b) 16
(c) 26
(d) 52
(e) 25

解法

+的優先權大於 << 因此
= 1 << 5 << 4
= 32 << 4
= 512

延伸問題

  • 在 C 語言規格書中,找出對應運算子優先權的描述並嘗試解讀
    這是我找到的C語言運算子優先權,我認為優先權的意義應該是用讓大家有個規範可以遵守,增加code的易讀性,就像數學四則運算規定先乘除後加減一樣,讓每條式子的答案唯一,讓每個人對於同樣的式子有一樣的認知。

這不是第一手材料,回去翻閱 C99/C11 規格書!

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
jserv

第二題

第 1 週測驗題測驗5

考慮以下整數乘法的實作程式碼:

int mul(int n, int m)
{ 
    int ret = 0;
    for (int c = 0; m; c++, m /= 2)
        if (!(m % 2 - 1)) OP
    return ret;
}

上述 OP 對應到下方哪個程式敘述呢?
(a) ret = n << c;
(b) ret += n;
(c) ret <<= n;
(d) ret = c << n;
(e) ret += n << c;

解法

研究 for 迴圈後可看出 for 迴圈是拿來把 m 變二進位,若在那一位為1 (用 if 判斷是否為1) ,就把 n 乘上那位數,並馬上加到答案裡,像是 6 * 7 = 6 * 111(二進位) = 6 * 1 + 6 * 2 + 6 * 4 因此答案就是 (e)ret += n << c;

延伸問題

  • 解釋為何乘法可運作?
    因為這個乘法的乘數是正數,若乘數為負數,m % 2 等於 0 or -1 ,則永遠進不了 if ,答案都會為 0 因此這個乘法只有在乘數為正數時才可運作。

如何修正?不要只有「因為所以」這樣的描述,要有推論和改進方案!我們做的是工程訓練,不是考公職。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
jserv

第三題

第 2 週測驗題測驗3

考慮到某些實數的二進位表示形式如同 \(0.yyyyy...\) 這樣的無限循環小數,其中 \(y\) 是個 \(k\) 位的二進位序列,例如 \(\frac{1}{3}\) 的二進位表示為 \(0.01010101...\) (y = 01),而 \(\frac{1}{5}\) 的二進位表示為 \(0.001100110011...\) (y = 0011),考慮到以下 y 值,求出對應的十進位分數值。

  • y = 010011 => \(\frac{19}{X1}\)
  • y = 101 => \(\frac{5}{X2}\)
  • y = 0110 => \(\frac{2}{X3}\)

X1 = ?
X2 = ?
X3 = ?

解法

  • 第一小題
    設 n = 0.010011(2進位) ,左右同乘 64 , 64n = 10011.010011(2進位) ,兩式相減等於 63n = 10011(2進位),則 63n = 19 ,因此 X1 = 63 。

  • 第二小題
    設 n = 0.101(2進位) ,左右同乘 8 , 8n = 101.101(2進位) ,兩式相減等於 7n = 101(2進位),則 7n = 5 ,因此 X1 = 7 。

  • 第三小題
    設 n = 0.0110(2進位) ,左右同乘 16 , 16n = 110.0110 ,兩式相減等於 15n = 110(2進位),則 15n = 6 , n = 6/15 = 2/5 ,則 X3 = 5 。

Select a repo