運算符是執(zhí)行特定操作的符號,它主要用于表達式的構(gòu)成。在C語言中運算符有很多種操作符,主要包括以下幾種運算符:
- 算術(shù)運算符
- 關(guān)系運算符
- 邏輯運算符
- 位運算符
- 賦值運算符
- 雜項運算符
算術(shù)運算符
算術(shù)運算符主要是一些算術(shù)運算,例如加減乘除等。詳細的運算規(guī)則如下表:
示例:
#include <stdio.h>
int main()
{
int a = 1, b1 = 2;
float b2 = 2.0;
printf("a + b1 = %dn", a + b1);
printf("a - b1 = %dn", a - b1);
printf("a * b1 = %dn", a * b1);
printf("a / b1 = %dn", a / b1);
printf("a / b2 = %fn", a / b2);
printf("a %% b1 = %dn", a % b1);
printf("a++ = %d ; a = %dn", a++, a);
printf("++a = %d ; a = %dn", ++a, a);
printf("a-- = %d ; a = %dn", a--, a);
printf("--a = %d ; a = %dn", --a, a);
return 0;
}
輸出結(jié)果:
上述運算中有幾點需要特別的注意。除法運算中如果兩個操作數(shù)都是整數(shù)那么得到的結(jié)果也必然是整數(shù)而不是小數(shù),如果兩個操作數(shù)其中有一個數(shù)是小數(shù)那么其結(jié)果也是小數(shù);對于整除運算結(jié)果也是整數(shù)。對于自增或自減運算,運算符在操作數(shù)之前和之后對于表達是本身來說有著一定的區(qū)別,但對于操作數(shù)自身是一樣的;如果操作數(shù)在運算符的左邊,則表達式的值就是操作數(shù)未運算之前的值,反之,就是運算之后的值。
關(guān)系運算符
關(guān)系運算符主要是操作數(shù)大小的判斷運算,例如兩個操作數(shù)是否相等。詳細的運算規(guī)則如下表:
示例:
#include <stdio.h>
int main()
{
int a1 = 1, b1 = 2;
int a2 = 1;
printf("a1 == a2 : %dn", a1 == a2);
printf("a1 == b1 : %dn", a1 == b1);
printf("a1 != b1 : %dn", a1 != b1);
printf("a1 > b1 : %dn", a1 > b1);
printf("a1 >= a2 : %dn", a1 >= a2);
printf("a1 < b1 : %dn", a1 < b1);
printf("a1 <= b1 : %dn", a1 <= b1);
return 0;
}
輸出結(jié)果:
上面的的輸出結(jié)果中,1為真,0為假。
邏輯運算符
邏輯運算也叫布爾運算,主要是測試真假值。詳細的運算規(guī)則如下表:
示例:
#include <stdio.h>
int main()
{
int a0 = 0, b0 = 0;
int a1 = 1, b1 = 1;
printf("a0 && b0 : %dn", a0 && b0);
printf("a0 && a1 : %dn", a0 && a1);
printf("a1 && b1 : %dn", a1 && b1);
printf("a0 || b1 : %dn", a0 || b1);
printf("!a0 : %dn", !a0);
printf("!a1 : %dn", !a1);
}
輸出結(jié)果:
位運算
位運算是直接對操作數(shù)存儲在內(nèi)存中的二進制進行按位操作。所以其速度也會比一般的運算速度會快。詳細的運算規(guī)則如下表:
示例:
#include <stdio.h>
int main()
{
int a = 5, b = 3;
printf("a & b = %dn", a & b);
printf("a | b = %dn", a | b);
return 0;
}
輸出結(jié)果:
賦值運算
最簡單的賦值運算符就是”=“,它的優(yōu)先級很低,后面會介紹。詳細的運算規(guī)則如下表:
示例:
#include <stdio.h>
int main()
{
int a = 1, b = 2, c = 3;
a += 1;
b -= 1;
c %= 2;
printf("a = %dn", a);
printf("b = %dn", b);
printf("c = %dn", c);
a <<= 2;
printf("a = %dn", a);
a >>= 1;
printf("a = %dn", a);
b >>= 1;
printf("b = %dn", b);
return 0;
}
輸出結(jié)果:
雜項運算
除了上面幾種運算符外,還有幾種比較常用的運算符。詳細的運算規(guī)則如下表:
sizeof()在數(shù)據(jù)類型章節(jié)已經(jīng)介紹過,& 和 *在指針的篇幅會做詳細的介紹,這里不過多說明。我們來看一個三目運算(?:)的例子,下面示例中如果“?”符號前a>b的條件成立,則取“:”符號前a的值,否則,取后面c的值。
示例:
#include <stdio.h>
int main()
{
int a = 1, b = 2, c = 3;
printf("a > b ? a : c= %dn", a > b ? a : c);
return 0;
}
輸出結(jié)果:
運算符優(yōu)先級
多個運算符在表達中出現(xiàn)時有著一定的運算順序,不同運算符有優(yōu)先級的高低,下表列出了不同運算符的優(yōu)先級順序,從上到下優(yōu)先級從高到低。