原住民族考試四等考試-電子工程類科計算機概要105 年第 5 題單選題
以計算機進行數值運算,假設運算過程中皆不產生溢位(overflow),則下列敘述中,何者正確?
A變數 A、B、C 皆為浮點數(floating point)則(A + B)+ C = A +(B + C)
B變數 A 與 B 皆為無號整數(unsigned integer)則(A > > B)< < B = A(註:>>代表右移位;<<代表左移位)
C變數 A 與 B 皆為浮點數則 A + 2 * B =(A + B)+ B
D變數 A、B、C 皆為有號整數則(A + B)+ C = A +(B + C)正確答案
D正確答案
浮點數因精度誤差不滿足結合律,整數運算在不溢位前提下才滿足,右移會遺失低位元無法還原。
為什麼答案是 D
有號整數在「不溢位」前提下,其加法為精確運算,滿足數學上的結合律,(A+B)+C = A+(B+C) 成立。題幹已排除溢位,故為正解。
載入中…
完整詳解
Pro · 無限重點 浮點數因精度誤差不滿足結合律,整數運算在不溢位前提下才滿足,右移會遺失低位元無法還原。
看到浮點數 + 結合律 = 錯;右移再左移 = 低位元歸零,不可逆。
逐選項分析
A✕ 陷阱
浮點數因尾數位數有限會產生捨入誤差(rounding error),(A+B)+C 與 A+(B+C) 的中間結果精度不同,結合律不成立。這是計概最愛的陷阱。
B✕ 陷阱
A 右移 B 位會把最低 B 個位元「丟掉」(補 0 進高位),再左移 B 位低位只會補 0,無法還原原本被丟掉的位元,故結果 ≠ A。
C✕
同樣是浮點數運算問題:A+2*B 與 (A+B)+B 的運算順序不同,浮點數捨入誤差累積方式也不同,兩邊未必相等。
D✓ 正確
有號整數在「不溢位」前提下,其加法為精確運算,滿足數學上的結合律,(A+B)+C = A+(B+C) 成立。題幹已排除溢位,故為正解。
資料型別與加法結合律
| 型別 | 是否滿足結合律 | 原因 | 考點 |
|---|
| 有號整數(不溢位) | ✅ 滿足 | 精確運算 | D 選項 |
| 無號整數(不溢位) | ✅ 滿足 | 精確運算 | 常考 |
| 浮點數 | ❌ 不滿足 | 尾數捨入誤差 | A、C 選項 |
| 位移運算 | ❌ 不可逆 | 低位元遺失 | B 選項 |
直覺會以為數學上的結合律在計算機也成立,但浮點數因精度限制會產生誤差,反而是「整數」才滿足。另一陷阱是以為右移左移會還原,忽略了位移過程中資訊會遺失。