運算子是一種告訴編譯器執行特定的數學或邏輯操作的符號。c 語言內建了豐富的運算子,並提供了以下型別的運算子:
下表顯示了 c 語言支援的所有算術運算子。假設變數a的值為 10,變數b的值為 20,則:
運算子描述例項+
把兩個運算元相加
a + b 將得到 30
-從第乙個運算元中減去第二個運算元
a - b 將得到 -10
*把兩個運算元相乘
a * b 將得到 200
/分子除以分母
b / a 將得到 2
%取模運算子,整除後的餘數
b % a 將得到 0
++自增運算子,整數值增加 1
a++ 將得到 11
--自減運算子,整數值減少 1
a-- 將得到 9
a++和++a是不同的
a++是先賦值後運算
++a是先運算後賦值
下表顯示了 c 語言支援的所有關係運算子。假設變數a的值為 10,變數b的值為 20,則:
運算子描述
例項==
檢查兩個運算元的值是否相等,如果相等則條件為真。
(a == b) 為假。
!=檢查兩個運算元的值是否相等,如果不相等則條件為真。
(a != b) 為真。
>
檢查左運算元的值是否大於右運算元的值,如果是則條件為真。
(a > b) 為假。
<
檢查左運算元的值是否小於右運算元的值,如果是則條件為真。
(a < b) 為真。
>=
檢查左運算元的值是否大於或等於右運算元的值,如果是則條件為真。
(a >= b) 為假。
<=
檢查左運算元的值是否小於或等於右運算元的值,如果是則條件為真。
(a <= b) 為真。
下表顯示了 c 語言支援的所有關係邏輯運算子。假設變數a的值為 1,變數b的值為 0,則:
運算子描述
例項&&
稱為邏輯與運算子。如果兩個運算元都非零,則條件為真。
(a && b) 為假。
||稱為邏輯或運算子。如果兩個運算元中有任意乙個非零,則條件為真。
(a || b) 為真。
!稱為邏輯非運算子。用來逆轉運算元的邏輯狀態。如果條件為真則邏輯非運算子將使其為假。
!(a && b) 為真。
位運算子作用於位,並逐位執行操作。
假設如果 a = 60,且 b = 13,現在以二進位制格式表示,它們如下所示:
a = 0011 1100
b = 0000 1101
// 上下為一組觀察
-----------------
a&b = 0000 1100 // 都1才1
a|b = 0011 1101 // 有1就1
a^b = 0011 0001 // 有1為1,都1為0
~a = 1100 0011 // 0為1,1為0(反過來)
運算子
描述例項
<<
二進位制左移運算子。將乙個運算物件的各二進位制位全部左移若干位(左邊的二進位制位丟棄,右邊補0)。
a << 2 將得到 240,即為 1111 0000
>>
二進位制右移運算子。將乙個數的各二進位制位全部右移若干位,正數左補0,負數左補1,右邊丟棄。
a >> 2 將得到 15,即為 0000 1111
例項請看下面的例項,了解 c 語言中所有可用的位運算子:
#include int main()
當上面的**被編譯和執行時,它會產生下列結果:
line 1 - c 的值是 12下表列出了 c 語言支援的賦值運算子:line 2 - c 的值是 61
line 3 - c 的值是 49
line 4 - c 的值是 -61
line 5 - c 的值是 240
line 6 - c 的值是 15
運算子描述例項=
簡單的賦值運算子,把右邊運算元的值賦給左邊運算元
c = a + b 將把 a + b 的值賦給 c
+=加且賦值運算子,把右邊運算元加上左邊運算元的結果賦值給左邊運算元
c += a 相當於 c = c + a
-=減且賦值運算子,把左邊運算元減去右邊運算元的結果賦值給左邊運算元
c -= a 相當於 c = c - a
*=乘且賦值運算子,把右邊運算元乘以左邊運算元的結果賦值給左邊運算元
c *= a 相當於 c = c * a
/=除且賦值運算子,把左邊運算元除以右邊運算元的結果賦值給左邊運算元
c /= a 相當於 c = c / a
%=求模且賦值運算子,求兩個運算元的模賦值給左邊運算元
c %= a 相當於 c = c % a
<<=
左移且賦值運算子
c <<= 2 等同於 c = c << 2
>>=
右移且賦值運算子
c >>= 2 等同於 c = c >> 2
&=按位與且賦值運算子
c &= 2 等同於 c = c & 2
^=按位異或且賦值運算子
c ^= 2 等同於 c = c ^ 2
|=按位或且賦值運算子
c |= 2 等同於 c = c | 2
例項請看下面的例項,了解 c 語言中所有可用的賦值運算子:
#include main()
當上面的**被編譯和執行時,它會產生下列結果:
line 1 - = 運算子例項,c 的值 = 21下表列出了 c 語言支援的其他一些重要的運算子,包括sizeof和? :。line 2 - += 運算子例項,c 的值 = 42
line 3 - -= 運算子例項,c 的值 = 21
line 4 - *= 運算子例項,c 的值 = 441
line 5 - /= 運算子例項,c 的值 = 21
line 6 - %= 運算子例項,c 的值 = 11
line 7 - <<= 運算子例項,c 的值 = 44
line 8 - >>= 運算子例項,c 的值 = 11
line 9 - &= 運算子例項,c 的值 = 2
line 10 - ^= 運算子例項,c 的值 = 0
line 11 - |= 運算子例項,c 的值 = 2
運算子描述
例項sizeof()
返回變數的大小。
sizeof(a) 將返回 4,其中 a 是整數。
&返回變數的位址。
&a; 將給出變數的實際位址。
*指向乙個變數。
*a; 將指向乙個變數。
? :條件表示式
如果條件為真 ? 則值為 x : 否則值為 y
例項請看下面的例項,了解 c 語言中所有可用的雜項運算子:
#include int main()
當上面的**被編譯和執行時,它會產生下列結果:
line 1 - 變數 a 的大小 = 4運算子的優先順序會影響到乙個表示式如何計算。某些運算子比其他運算子有更高的優先順序,例如,乘除運算子具有比加減運算子更高的優先順序。line 2 - 變數 b 的大小 = 2
line 3 - 變數 c 的大小 = 8
a 的值是 4
*ptr 是 4
b 的值是 30
b 的值是 20
下表將按運算子優先順序從高到低列出各個運算子,在表示式中,較高優先順序的運算子會優先被計算。
類別運算子
結合性字尾
() -> . ++ - -
從左到右
一元+ - ! ~ ++ - - (type)* & sizeof
從右到左
乘除* / %
從左到右
加減+ -
從左到右
移位<< >>
從左到右
關係< <= > >=
從左到右
相等== !=
從左到右
位與 and
&從左到右
位異或 xor
^從左到右
位或 or
|從左到右
邏輯與 and
&&從左到右
邏輯或 or
||從左到右
條件?:
從右到左
賦值= += -= *= /= %=>>= <<= &= ^= |=
從右到左逗號,
從左到右
參考自:
C語言 運算子與 運算子
我們平時使用帶參巨集時,字串中的巨集引數是沒有被替換的。例如 輸出結果為 然而,我們期望輸出的結果是 5 20 2513 14 27 這該怎麼做呢?其實,c語言允許在字串中包含巨集引數。在類函式巨集 帶參巨集 中,號作為乙個預處理運算子,可以把記號轉換成字串。例如,如果a是乙個巨集形參,那麼 a就是...
C語言 運算子和 運算子
變數 代表 取變數的位址 變數 代表 指標型的變數 取址運算子 用來取得其運算元的位址。如果運算元 x 的型別為 t,則表示式 x 的型別是 t 型別指標 指向 t 的指標 取址運算子的運算元必須是在記憶體中可定址到的位址。換句話說,該運算子只能用於函式或物件 例如左值 而不可以用於位欄位,以及那些...
C語言之運算子 (筆記)
下表顯示了 c 語言支援的所有算術運算子。假設變數 a 的值為 10,變數 b 的值為 20,則 運算子描述例項 把兩個運算元相加 a b 將得到 30 從第乙個運算元中減去第二個運算元 a b 將得到 10 把兩個運算元相乘 a b 將得到 200 分子除以分母 b a 將得到 2 取模運算子,整...