首先,引入表達(dá)式的概念:由操作數(shù)和運(yùn)算符組合成的式子
分為左值和右值
(1)左值:就是可以寫
的內(nèi)存塊,也就是變量
(2)右值:可以讀
的內(nèi)存塊,也就是變量,常量,字面值
(1)+
(2)-
(3)*
(4)/
如:10/3=3
5.0/2=2.5
說明:
如果兩個操作數(shù)都為整數(shù)
,執(zhí)行整數(shù)除法(舍棄小數(shù)部分),只要有浮點(diǎn)數(shù)
,就執(zhí)行浮點(diǎn)數(shù)除法,而且會向下取整
(也就是小數(shù)點(diǎn)之后的舍棄)
注意:/的右操作數(shù)不能為0
例:
int a=1;
int b=0;
printf("%d\n",a/b);
結(jié)果會報(bào)錯:
Exception in thread "main" java.lang.ArithmeticException: / by zero
//算術(shù)異常
(5)%–>取余
如:10%3=1
注意:%要求兩個操作數(shù)都為整數(shù),并且右操作數(shù)不能為0
,并且運(yùn)算結(jié)果的符號由左操作數(shù)決定
例:
printf("%d\n",10%3);//1
printf("%d\n",-10%3);//-1
printf("%d\n",-10%-3);//1
printf("%d\n",-10%-3);//-1
(6)++ -->自增運(yùn)算符
(7)-- -->自減運(yùn)算符
注意:自增和自減運(yùn)算符只能用于變量
,不可以用于常量或表達(dá)式
分為前置和后置:
(1)前置:先++或–,再使用
(2)后置:先使用,再++或–
例:
int i=0;
printf("%d\n",++i);//1
printf("%d\n",i);//1
i=0;
printf("%d\n",i++);//0
printf("%d\n",i);//1
二.賦值運(yùn)算符=:結(jié)合性從右到左
例:
int a,b;
a=b=10;
printf("%d\n",a);//10
printf("%d\n",b);//10
復(fù)合賦值運(yùn)算符
+=
-=
*=
/=
%=
<<=
>>=
&=
/=
^=
例:
a+=3;//相當(dāng)于a=a+3;
三.關(guān)系運(yùn)算符>>=
<
<=
!= 用于測試“不相等”
== 用于測試“相等”
= 用于賦值
注意:要注意 == 和 = 的區(qū)別
四.邏輯運(yùn)算符&&(邏輯與,二元運(yùn)算符)
真 && 真 ->真 真 && 假 ->假
假 && 真 ->假 假 && 假 ->假
||(邏輯或,二元運(yùn)算符)
真 || 真 ->真 真 || 假 ->真
假 || 真 ->真 假 || 假 ->假
!(邏輯非,一元運(yùn)算符)
注意:
邏輯與的短路問題:當(dāng)左操作數(shù)為假時,即可判斷表達(dá)式結(jié)果為假,右操作數(shù)不執(zhí)行。
邏輯或的短路問題:當(dāng)左操作數(shù)為真時,即可判斷表達(dá)式結(jié)果為真,右操作數(shù)不執(zhí)行。
例:
int a = 1, b = 1;
printf("%d\n", ++a || ++b);
printf(“a=%d b=%d\n”, a, b); // a=2 b=1
int a = -1, b = -1;
printf("%d\n", ++a && ++b);
printf(“a=%d b=%d\n”, a, b); // a=0 b=-1
例:
x=y=1;
t=++x||++y;
//結(jié)果是t=1,x=2,y=1
五.位運(yùn)算符(均在二進(jìn)制位上操作)首先,我們要知道,數(shù)據(jù)存儲的最小的單位是字節(jié),而對數(shù)據(jù)進(jìn)行操作的最小的單位是比特,每個字節(jié)由8個比特位構(gòu)成。
我們自己設(shè)定:A= 00000101,B= 00001011
&(按位與):同1為1,其它為0
則A&B=00000001
例:
|(按位或):有1即為1
則A|B=00001111
例:
~(按位取反):0變1,1變0
則~A=11111010
^(按位異或):相同為0,不同為1
則A^B=00001110
例:
0^0=0;
1^0=1;
1^1=0;
注意:一個數(shù)a位異或另外一個數(shù)b兩次,結(jié)果還是這個數(shù)a本身。(也就是說如果兩個數(shù)相同,異或的結(jié)果是0
)這個特點(diǎn)可以用來交換兩個元素的值
<<(按位左移):左操作數(shù)向左移動右操作數(shù)指定的位數(shù),低位補(bǔ)0
(也就是最左側(cè)不要了,右側(cè)補(bǔ)0)
則A<<2=00010100
注意:左移運(yùn)算符左移一位相當(dāng)于乘以2
,而且左移丟棄的是符號位,所以正數(shù)左移可能會變?yōu)樨?fù)數(shù)
>>(按位右移):左操作數(shù)向右移動右操作數(shù)指定的位數(shù),高位補(bǔ)符號位(正數(shù)補(bǔ)0,負(fù)數(shù)補(bǔ)1)
>則A>>2=00000001
注意:右移運(yùn)算符右移一位相當(dāng)于除以2
>>>:無符號右移:最右側(cè)不要了,最左側(cè)補(bǔ)0
六.條件運(yùn)算符語法是 :exp1?exp2:exp3;
這個表達(dá)式的意思是如果exp1為真,整個表達(dá)式的結(jié)果就是exp2,如果exp1為假,整個表達(dá)式的結(jié)果就是exp3
例:
//求較大值
int a=10;
int b=20;
printf("%d\n",(a>b?a:b));
注意:表達(dá)式2和表達(dá)式3的結(jié)果必須是同類型
的,除非可以發(fā)生隱式類型轉(zhuǎn)換
例:
int a=10;
int b=20;
int c=a>b?1:2.0;
表達(dá)式不能單獨(dú)存在,結(jié)果必須要被使用
例:
int a = 10;
int b = 20;
a >b? a : b; // 會報(bào)錯: 不是語句
七.逗號運(yùn)算符exp1,exp2,exp3,…expN;
逗號表達(dá)式會從左到右依次執(zhí)行,整個表達(dá)式的結(jié)果為最后一個表達(dá)式的結(jié)果
八.sizeof注意:sizeof是一個運(yùn)算符
,而不是函數(shù)
注意:同一級的運(yùn)算符,優(yōu)先次序由結(jié)合方向決定,
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧