三目運算子對比三個 零基礎學C語言 運算子

2021-10-14 15:54:32 字數 4659 閱讀 2974

這是乙個c語言系列文章,如果是初學者的話,建議先行閱讀之前的文章。筆者也會按照章節順序發布。

int a = 5.0 / 2;
這裡其實涉及到了運算子,即 /。

在程式語言的世界裡並不是只有加減乘除的四則運算,還包含了很多其他運算,參見下圖:

舉個簡單的例子:

1 + 2 * 3 = 7 而不會計算成9
這裡其實就是因為在我們小學數學中,乘除運算的優先順序高於加減運算,因此優先計算乘除,然後計算加減。

同理,運算子表中,優先順序從上到下依次遞減,換言之,越靠上的運算子,優先順序越高。例如:

(1 + 2) * 3 = 9 而不會計算成7
因為1+2在括號中,而小括號在c語言中也是一種運算子,且其優先順序最高。

有的讀者會問,同級別的運算子如何計算呢?這就要看運算子結合方向了。例如:

2 * 10 / 4 % 2
其中%為求餘運算,即計算除法後的餘數,也稱其為取模運算。上面這個式子的結果是1。如何計算呢?

由於乘、除、求餘三個運算都是同級別,且他們的結合方向都是從左到右的,因此我們從左向右依次計算即可。

下面我們簡單介紹一下何為:單目運算子、雙目運算子、三目運算子。

其中,雙目運算子是最容易被理解的,例如加法:

1 + 2
在加號前後個需要乙個值方可使用加法,即加法運算需要兩個數值,數值的個數也就是目數,換句話說,加法就是雙目運算子。

那麼,單目運算子就比較容易理解了,即運算子只需要乙個數值即可完成運算,例如:

-1
其中-為負號運算子,它是單目運算子,需要乙個數值來進行運算,在這個例子中,這個數值就是1。而運算子配合運算所需要的資料計算後的結果是-1。

而三目運算子,就是說運算需要三個資料來完成,後面我們會對每乙個運算子舉出乙個例子。

下面展示各種運算子的使用方式,很多運算子初學者可能不理解其含義,暫且不要糾結,後面的文章還會涉及。

int a = arr[0]; //從陣列arr中取其第乙個元素(下標從0開始)
int a = (1 + 2) * 3; //a = 9
int a = person.name; //從person結構體物件中取name成員的值
int a = person->name; //從person結構體指標所指向的物件中取name成員的值
int a = -1;
int a = (int)5.2; //a = 5
int a = 1;a++; // 變數a的值為2,但是a++表示式的值為1,表示式將在後面介紹,初學者可以先不糾結++a; // 變數a的值為2,且++a表示式的值為2
int a = 1;a--; // a的值為0,但a--表示式的值為1++a;// a的值為0,且--a表達是的值為0
int a = 0, *p = &a;*p = 1; //向指標p所指向的記憶體位址中寫入整數1
int a = 0;int *p = &a; //指標p等於變數a的記憶體位址
int a = !1; //a = 0,任何非0值的!運算後的值都是0
unsigned int a = ~0; //a = 0xffffffff 無符號整型佔4位元組,即32位,~對每一位取反,0的每一位都是0,取反後每一位都是1
int a = sizeof(int); //a = 4,sizeof將計算給定的型別或者物件所佔的位元組數int b = sizeof(a); //b = 4,因為a是整型
int a = 10 / 2;
int a = 3 * 2;
int a = 9 % 2
int a = 1 + 2
int a = 10 - 9
int a = 1 << 1; //a = 2, 1預設為有符號整型,即其低位元組位元形式為 0000 0001,整個32位向左移1位,低位元組位元變為 0000 0010,移入部分預設補0
int a = 1 >> 1; //a = 0, 1預設為有符號整型,即其低位元組位元形式為 0000 0001,整個32位向右移1位,低位元組位元變為 0000 0000,移入部分預設補0
int a = 1 > 2; //a = 0, 1 > 2是乙個真值邏輯判斷,很顯然這個條件不成立,不成立時值為0
int a = 1 >= 2; //a = 0, 1 >= 2是乙個真值邏輯判斷,很顯然這個條件不成立,不成立時值為0
int a = 2 < 1; //a = 0, 2 < 1是乙個真值邏輯判斷,很顯然這個條件不成立,不成立時值為0
int a = 2 <= 1; //a = 0, 2 <= 1是乙個真值邏輯判斷,很顯然這個條件不成立,不成立時值為0
int a = 2 == 1; //a = 0, 2 == 1是乙個真值邏輯判斷,很顯然1不等於2,不成立時值為0
int a = 2 != 1; //a = 1, 2 == 1是乙個真值邏輯判斷,很顯然1不等於2條件成立,成立時值為1
int a = 3 & 2; //a = 2, 3的低位元組二進位制為0000 0011,2的低位元組二進位制為0000 0010,與運算只有對應位都為1時結果為1,其餘為0,所以低位元組與運算結果位 0000 0010
int a = 3 ^ 2; //a = 1, 異或運算是兩數對應位數值不相同則運算後該位值為1,相同為0
int a = 1 | 2; //a = 3,或運算是兩數對應位數值只要有乙個為1則運算後該位值為1,都為0則為0
int a = 0 && 1; //a = 0, &&前後均為真值判斷,且當左側真值判斷為假時,不再進行右側真值判斷,0在真值判斷時含義為假,而假對應的數值為0,因此a = 0
int a = 0, b = 2;int c = a || b; //c = 1, ||前後均為真值判斷,且當左側真值判斷為真時,不再進行右側真值判斷,2在真值判斷時含義為真,而真對應的數值為1,因此c = 1而不是2
int a = 1 > 2 ? -1 : 3; //a = 3//條件運算子的左右時先進行?左側的真值判斷,如果為真則計算?與:之間的值,如果為假則計算:右側的值int b = 1 > 2 ? 3 - 1 : 2 + 6; //b = 8
int a = 1; //其中的=就是賦值運算子
int a = 10;a /= 2; //a = 5, 運算子等價於 a = a / 2,原本a=10,除以2後等於5
int a = 2;a *= 3; //a = 6, 等價於a = a * 3
int a = 9;a %= 2; //a = 1, 等價於a = a % 2
int a = 1;a += 1; //a = 2, 等價於 a = a + 1
int a = 5;a -= 2; //a = 3, 等價於 a = a - 2
int a = 1;a <<= 1; //a = 2, 等價於 a = a << 1
int a = 3;a >>= 1; //a = 1, 等價於 a = a >> 1
int a = 3;a &= 1; //a = 1, 等價於 a = a & 1
int a = 3;a ^= 1; //a = 2, 等價於 a = a ^ 1
int a = 1a |= 2; //a = 3, 等價於 a = a | 2
int a = (1,2,3); //a = 3, 逗號運算子的值是最右側逗號右側的值//這裡之所以加(),是因為賦值表示式優先順序高於逗號表示式,會導致a=1作為逗號運算子的一部分//我們將在表示式的文章中再次介紹這個運算子
感謝閱讀!

三目運算子對比三個 06運算子大全c語言值得收藏

算術運算子 三目運算子 關係運算子 邏輯運算子 位運算子 逗號運算子 算術運算子在小學的時候已經運用得爐火純青了,主要包含 加 減 乘 除 取餘 取模 剩下的兩個需要特別注意 自增 自減 遵循talk is cheap,show me code的原則,先上 int i 4 i printf i d ...

C 三目運算子 ?

三目運算子 是c 裡唯一乙個三元運算子。其表示式格式為 表示式1 表示式2 表示式3 執行步驟 1 計算表示式1的值 2 若表示式1的值為真 或非0 則只計算表示式2,將其結果作為整個表示式的值 若表示式1的值為假 或為0 則只計算表示式3,將其結果作為整個表示式的值。例,x a b?a b 先計算...

C 條件運算子(三目運算子)

在某些情況下,可以用條件運算子 來簡化if語句。是乙個三元運算子,其構成的表示式格式為 表示式1 表示式2 表示式3 條件運算子的執行流程示意圖如上圖所示,描述如下 1 計算表示式1的值 2 若表示式的值為真 或非0 則只計算表示式2,並將其結果作為整個表示式的值 反之,即表示式1的值為假 或為0 ...