1、雜項(xiàng)運(yùn)算符 ? sizeof & 三元
下表列出了 C 語言支持的其他一些重要的運(yùn)算符,包括 sizeof 和 ? :。
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
sizeof() | 返回變量的大小。 | sizeof(a) 將返回 4,其中 a 是整數(shù)。 |
& | 返回變量的地址。 | &a; 將給出變量的實(shí)際地址。 |
* | 指向一個變量。 | *a; 將指向一個變量。 |
? : | 條件表達(dá)式 | 如果條件為真 ? 則值為 X : 否則值為 Y |
實(shí)例
請看下面的實(shí)例,了解 C 語言中所有可用的雜項(xiàng)運(yùn)算符:
#include <stdio.h>
int main()
{
int a = 4;
short b;
double c;
int* ptr;
/* sizeof 運(yùn)算符實(shí)例 */
printf("Line 1 - 變量 a 的大小 = %lu\n", sizeof(a) );
printf("Line 2 - 變量 b 的大小 = %lu\n", sizeof(b) );
printf("Line 3 - 變量 c 的大小 = %lu\n", sizeof(c) );
/* & 和 * 運(yùn)算符實(shí)例 */
ptr = &a; /* 'ptr' 現(xiàn)在包含 'a' 的地址 */
printf("a 的值是 %d\n", a);
printf("*ptr 是 %d\n", *ptr);
/* 三元運(yùn)算符實(shí)例 */
a = 10;
b = (a == 1) ? 20: 30;
printf( "b 的值是 %d\n", b );
b = (a == 10) ? 20: 30;
printf( "b 的值是 %d\n", b );
}
當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:
Line 1 - 變量 a 的大小 = 4
Line 2 - 變量 b 的大小 = 2
Line 3 - 變量 c 的大小 = 8
a 的值是 4
*ptr 是 4
b 的值是 30
b 的值是 20
2、 ? : 運(yùn)算符(三元運(yùn)算符)
我們已經(jīng)在前面的章節(jié)中講解了 條件運(yùn)算符 ? :,可以用來替代 if...else 語句。它的一般形式如下:
Exp1 ? Exp2 : Exp3;
其中,Exp1、Exp2 和 Exp3 是表達(dá)式。請注意,冒號的使用和位置。
? 表達(dá)式的值是由 Exp1 決定的。如果 Exp1 為真,則計(jì)算 Exp2 的值,結(jié)果即為整個 ? 表達(dá)式的值。如果 Exp1 為假,則計(jì)算 Exp3 的值,結(jié)果即為整個 ? 表達(dá)式的值。
實(shí)例
以下實(shí)例通過輸入一個數(shù)字來判斷它是否為奇數(shù)或偶數(shù)
#include<stdio.h>
int main()
{
int num;
printf("輸入一個數(shù)字 : ");
scanf("%d",&num);
(num%2==0)?printf("偶數(shù)"):printf("奇數(shù)");
}
3、C 中的運(yùn)算符優(yōu)先級
運(yùn)算符的優(yōu)先級確定表達(dá)式中項(xiàng)的組合。這會影響到一個表達(dá)式如何計(jì)算。某些運(yùn)算符比其他運(yùn)算符有更高的優(yōu)先級,例如,乘除運(yùn)算符具有比加減運(yùn)算符更高的優(yōu)先級。
例如 x = 7 + 3 * 2,在這里,x 被賦值為 13,而不是 20,因?yàn)檫\(yùn)算符 * 具有比 + 更高的優(yōu)先級,所以首先計(jì)算乘法 3*2,然后再加上 7。
下表將按運(yùn)算符優(yōu)先級從高到低列出各個運(yùn)算符,具有較高優(yōu)先級的運(yùn)算符出現(xiàn)在表格的上面,具有較低優(yōu)先級的運(yùn)算符出現(xiàn)在表格的下面。在表達(dá)式中,較高優(yōu)先級的運(yùn)算符會優(yōu)先被計(jì)算。
類別 | 運(yùn)算符 | 結(jié)合性 |
---|---|---|
后綴 | () [] -> . ++ - - | 從左到右 |
一元 | + - ! ~ ++ - - (type)* & sizeof | 從右到左 |
乘除 | * / % | 從左到右 |
加減 | + - | 從左到右 |
移位 | << >> | 從左到右 |
關(guān)系 | < <= > >= | 從左到右 |
相等 | == != | 從左到右 |
位與 AND | & | 從左到右 |
位異或 XOR | ^ | 從左到右 |
位或 OR | | | 從左到右 |
邏輯與 AND | && | 從左到右 |
邏輯或 OR | || | 從左到右 |
條件 | ?: | 從右到左 |
賦值 | = += -= *= /= %=>>= <<= &= ^= |= | 從右到左 |
逗號 | , | 從左到右 |
實(shí)例
請看下面的實(shí)例,了解 C 語言中運(yùn)算符的優(yōu)先級:
#include <stdio.h>
main()
{
int a = 20;
int b = 10;
int c = 15;
int d = 5;
int e;
e = (a + b) * c / d; // ( 30 * 15 ) / 5
printf("(a + b) * c / d 的值是 %d\n", e );
e = ((a + b) * c) / d; // (30 * 15 ) / 5
printf("((a + b) * c) / d 的值是 %d\n" , e );
e = (a + b) * (c / d); // (30) * (15/5)
printf("(a + b) * (c / d) 的值是 %d\n", e );
e = a + (b * c) / d; // 20 + (150/5)
printf("a + (b * c) / d 的值是 %d\n" , e );
return 0;
}
當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:
(a + b) * c / d 的值是 90
((a + b) * c) / d 的值是 90
(a + b) * (c / d) 的值是 90
a + (b * c) / d 的值是 50xxxxxxxxxx (a + b) * c / d 的值是 90((a + b) * c) / d 的值是 90(a + b) * (c / d) 的值是 90a + (b * c) / d 的值是 50(a + b) * c / d 的值是 ``90``((a + b) * c) / d 的值是 ``90``(a + b) * (c / d) 的值是 ``90``a + (b * c) / d 的值是 ``50