33.若已宣告「int i,j=10;」,則程式中指令「i= ++j + 20*8 >> 1%6」執行完 i 的值為何?
(A) 17
(B) 85
(C) 15
(D) 16
答案:登入後查看
統計: A(2), B(6), C(1), D(1), E(0) #3276900
統計: A(2), B(6), C(1), D(1), E(0) #3276900
詳解 (共 2 筆)
#6958603
先看哪個運算子先算:
* / % 優先於 +,
+ 又優先於 >>,
所以順序是:
先乘除取餘 → 再加法 → 再位移。
初始:j = 10
(1) ++j
→ j 變成 11,++j 的值是 11。
(2) 找出 % 部分
因為 % 和 * 同級,左至右:
++j + 20 * 8 >> 1 % 6
依結合方向左至右,
先處理 20 * 8,再 >>,再 %。
但注意!在 C 語言中:
位移運算子 >> 的優先級 低於加法、高於比較,
但 比 % 還低。
所以實際分組是:
ㅤㅤ
i = (++j + 20 * 8) >> (1 % 6);
1️⃣ ++j → 11
2️⃣ 20 * 8 = 160
3️⃣ ++j + 20 * 8 = 11 + 160 = 171
4️⃣ 1 % 6 = 1
5️⃣ 171 >> 1 → 右移 1 位,相當於除以 2
→ 171 / 2 = 85(整數截去小數)
✅ 結果:
i = 85
j = 11
1
0