C語言筆記 04 運算子

2022-04-02 22:03:45 字數 4561 閱讀 8832

運算子是一種告訴編譯器執行特定的數學或邏輯操作的符號。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

line 2 - c 的值是 61

line 3 - c 的值是 49

line 4 - c 的值是 -61

line 5 - c 的值是 240

line 6 - c 的值是 15

下表列出了 c 語言支援的賦值運算子:

運算子描述例項=

簡單的賦值運算子,把右邊運算元的值賦給左邊運算元

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

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

下表列出了 c 語言支援的其他一些重要的運算子,包括sizeof? :

運算子描述

例項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 取模運算子,整...