所有的運算式都是由運算子 (operator, 算符)、 運算元 (operand) 與括號組合起來的。
注意:比較運算是利用減法來完成的, 相關的型態轉換可以參考減法。
每一個運算子會作用在其運算元上並產生一值 (value)
例如:
一個運算式中可以有多個運算子 (及其作用的運算元), 其運算之順序由
來決定, 請參考課本第 208 及第 209 頁。
例如:
結合規則:
二元加號由左至右,因此 a + b + c 運算式中先做 a + b 再做 3 + c
二元等號由右至左,因此 a = b = c 運算式中先做 b = c 再做 a = 3
優先順序:
先乘除再加減,因此 a + b * c 運算式中先做 b * c 再做 a + 6
運算式中運算子的運算順序可以用小括號來更改 例如: (a + b) * c 先做 a + b 再做 3 * c
大部份的運算子都不會去改變其運算元變數內儲存的數值, 可是少部份的運算子除了計算一個結果數值之外, 還會改變參與運算變數內的數值, 例如:
例如:
C 語言中很多運算子是共同用一個符號的, 它們所代表的意義與動作不同,例如:
程式中都只寫個 '+' 號而已, 編譯器究竟如何分辨它們呢?? 其實編譯器完全靠運算元的型態來分辨, 例如:
前一個例子中
為浮點之加法, 實際上編譯器自動將整數變數 x 內存放的資料轉換為倍精準浮點數 (double), 並將常數 3.5 以倍精準浮點數 (double)表示, 如此方可執行浮點之加法。
上面範例與下例是完全一樣的
此時程式設計者為了避免混淆, 自己加入 (double) 這樣子的運算子, 確保 CPU 將變數 x 資料取出後會先將之轉換為 double 型態, 再進行浮點相加的運算。
都會損失所有小數點後的資料, 如果數字太大超過該整數型態可以表示的最大值時, 超過的位元也會不見, 在執行時出現這兩種狀況你的程式都會假裝沒事一樣地繼續下去, 因此你自己在寫這樣子的程式時要特別小心。
在做這樣子的型態自動轉換時, 許多編譯器都會給你警告 (warning), 告訴你資料的精確度會降低, 如果你做強制性的型態轉換的話就不會有警告訊息了。
小數點後的精確度會從十進位的 15 位元降為 8 位元, 此種情況不會出現任何編譯警告或是執行錯誤, 若是超過目的浮點數所能表示的最大數字的話會有執行錯誤, 程式會中斷掉。
若是來源變數內的資料超過目的變數型態所能表示的最大數字的話, 不會產生任何執行時的錯誤, 但是超過的位元會自動消失, 會造成程式邏輯的錯誤。
回
程式設計課程
首頁
by Pei-yih Ting
E-mail: pyting@cs.ntou.edu.tw