C語言裏除了提供了算術中常用的四則運算符號以外,也額外提供了一些方便於程式撰寫的運算符號如下表:
四則及除取餘的運算式結構如下
運算結果 = 運算元1 運算子 運算元2
在C語言中的四則運算,運算元型態,會影響運算方式。 整數相除會得到整數的商以整數的餘數,想取得商時使用『/』運算子,想取得餘數時則使用『%』。浮點數(逼近實數)相除時,會得浮點數(逼近實數)的商,由於具有小數部份,所以不會再有餘數的問題。
例如
#include "c4mlib.h"
main() {
C4M_DEVICE_set();
int i_x,i_y,i_quo,i_res;
float f_x,f_y,f_quo;
i_x = 10;
f_x = 10.0;
i_y = 3;
f_y = 3.0;
i_quo=i_x/i_y;
i_res=i_x%i_y;
printf("%d/%d = %d residual %d\n”,i_x,i_y,i_quo,i_res);
f_quo=f_x/f_y;
printf("%f / %f = %f\n",f_x,f_y,f_quo);
}
預期執行結果
10/3=3 residual 1
10.000/3.000=3.333
前述範例程式中,我們規規矩矩的把整數運算結果存到整數的變數,接浮點數運算的結果,存到浮點數變數。如果不小心,或則故意讓一個四則運算方程式中,混合著浮點數以及整數,那結果會如何能? C語言編譯器,一方面為了避免程式中混亂的變數型態造成錯誤的計算結果,它會做檢查,並適時提出警告或則是直指錯誤。但是太過嚴格的檢查時,常會造成查出太多錯誤,大錯埋在小錯裡,反而不利於除錯。因此,C語言編譯器,有些時機會協助做型態轉換,讓原本運算元及結果型態不相容的方程式,轉成相容之後再運算。至於說會如何轉換,說一尺不如做一吋,學員可以試著實作各種不同的排列組合,看看C編譯器會如何處理。由於電腦處理巨量資料,常會把資料做一些排列組合,因此讓資料報數是很常見的運算。常叫的名字就會出現簡稱,常用的指令被有簡名,++及--分別代表增1以及損1。
++i; // i = i + 1;
--i; // i = i - 1;
比較奇特需要適應的是,增損指令,可以又被套用在運算中,造成同時被增損變數值以及運算結果的值,結果會與直覺有一點差異,而造成初學者程式出現難以找到的BUG。
範例 (無法執行)
#include "c4mlib.h"
main() {
C4M_DEVICE_set();
int x,y,i=0,j=0;
x=1+i+1;
y=1 + j++;
printf("i:%d,x:%d,j:%d,y:%d\n",i,x,j,y);
}
預期執行結果
i:0,x:2,j:1,y:1?
四則運算有先乘除後加減的規矩,C語言也遵循相同原則,並擴及其它運算子訂了一套優先順序。