標籤:
一、基本運算子
(1)賦值運算子:=
- a=2002; //將值2002賦給變數a,動作從右至左
- 賦值運算左邊必須指向一個儲存位置(變數名——指標)
(2)加法、減法運算子:+、—(二元或雙目運算子)
- printf("%d",4+20);
- 被加的值(運算元)可以是變數也可以是常量
(3)符號運算子:+和—(一元)
- a=-12;b=-a; //把值12賦給b.(只需要一個運算元)
(4)乘法運算子:*
- cm=2.54*inch;//用2.54的值乘以變數inch,然後將結果賦給cm.
(5)除法運算子:/
- for=12.0/3.0; //左邊的值被右邊的值除,把值4.0賦給for
- 截尾:整數除法小數部分被丟棄。5/4的結果是1.(C99趨零截尾)
- 混合類型:運算之前將整數轉化為浮點數
(6)模數運算子:%
- 用於整數運算,對浮點數運算無效
- a%b=a-(a/b)*b
- 模數運算的結果符號與第一個運算元的符號一致
(7)增量和遞減運算子:++和——(隻影響一個變數)
- 首碼和後置位元型的區別在於值的改變這一動作發生的準確時間是不同的。
- a++:先使用a,然後將它的增加;++a:先將a的值增加,然後再使用它。
- shoe=3.0;while(shoe<10){...++shoe;}和shoe=2.0;while(++shoe<9){...}等價。
- 替換方式b=++i; ### ++i;b=i;//如果第一行使用了i++,b的結果仍然相同。
(8)sizeof運算子和size_t類型:#、sizeof以位元組為單位返回運算元的大小。#、允許為一個類型建立一個別名(typedef double real;real a;//用real替代dobule)。
二、優先順序
- ()>+-(一元運算子)>*/%>+-(二元運算子)>= +、-(一元)和=結合性從右向左。
- y=6*12+5*20;除了兩個運算子共用一個運算元的情況以外,C不保證複雜運算式的哪個部分首先被求值。
- y=2;n=3;nextnum=(y+n++)*6; //nexnum=(2+3)*6=5*6=30;n=4;
三.運算式和語句
(1)運算式:運算式是運算子和運算元的組合,在C裡每個運算式都有一個值。5>3(值為1),{6+(c=3+8)}#值為17。
(2)語句:用分號標識。
- a=4是一個運算式,a=4;是一條語句。
- int a=0,b (如果從聲明語句裡去掉一個;則他既不是運算式也不具有一個值。
- 副作用和順序點。states=50;這個運算式的副作用是把變數states的值改變為50。語句裡的分號標誌了一個順序點。
- 複合陳述式用{};整個符合語句被認為是一個語句。縮排對編譯器不起作用。
四、類型轉換
- 提升和降級(包含兩種資料類型的運算中,兩個值被轉換成兩種類型裡較高的的層級),提升是平滑的無損害過程,降級會出現錯誤。
- 避免自動類型轉換特別是降級。
- 指派運算子:【mice=1.6+1.7;//mice=3.3】【mice=(int)1.6+(int)1.7;//mice=2】
【C-運算子】