LONGEPASS
Q93.

C++中有關指定運算的型態轉換(Type Conversion on Assignment),下列描述哪些是正確的?

電腦軟體設計共同科目 · 乙級 · Q93

難易度分析

4 / 5

本題採複選形式,要求對多項型態轉換規則(如擴展轉換、窄化轉換及精度損耗)進行全面且精確的真偽判定,增加了分析複雜度。

正確答案 (複選):②, ③, ④

  • ② 若左值的型態為整數型態,右值的型態為浮點數型態,右值的小數部分會四捨五入後指定給左值:將浮點數型態指定給整數型態時,小數部分會被捨棄後再指定給左值。此為 C++ 隱式型態轉換的規則,實務上需注意小數資訊會遺失。
  • ③ 若左值的型態為長整數型態,右值的型態為短整數型態,程式會將短整數轉換成長整數後再指定給左值:短整數(如 `short`)轉換為長整數(如 `long`)屬於擴展轉換(Promotion),系統會自動將短整數提升為長整數後再指定,此過程不會發生資料遺失,是安全的隱式轉換。
  • ④ 若左值的型態為短整數型態,右值的型態為長整數型態,可能會發生截位(Truncation)的狀況:長整數指定給短整數時,由於目標變數的儲存位元數較小,超出範圍的高位元資料會被截斷,此即截位(Truncation)現象,可能導致數值錯誤或溢位。

錯誤選項解析

  • ① 若左值的型態為浮點數型態,右值的型態為整數型態,數字會失真:將整數型態轉換為浮點數型態時,只要整數值在浮點數的有效位數範圍內(如 `float` 的 24 位元尾數),數值並不會失真。僅當整數過大超出浮點數精確表示範圍時才會發生精度損失,因此「數字會失真」的說法過於絕對。
Learning Tip

"隱式型態轉換是 C++ 程式設計常考的核心觀念。重點在於區分擴展轉換(小範圍轉大範圍,安全)與窄化轉換(大範圍轉小範圍,可能截斷或失真)。實務上建議使用顯式轉型運算子(如 `static_cast`)明確表達意圖,並開啟編譯器警告(如 `-Wconversion`)來偵測潛在的資料遺失風險。"

學員答題分佈

①若左值的型態為浮點數型態,右值的型態為整數型態,數字會失真0%
②若左值的型態為整數型態,右值的型態為浮點數型態,右值的小數部分會四捨五入後指定給左值0%
③若左值的型態為長整數型態,右值的型態為短整數型態,程式會將短整數轉換成長整數後再指定給左值0%
④若左值的型態為短整數型態,右值的型態為長整數型態,可能會發生截位(Truncation)的狀況0%

此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目