最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

P5.運(yùn)算符

2023-08-26 03:23 作者:創(chuàng)世十鷹  | 我要投稿

運(yùn)算符介紹:

運(yùn)算符是一種特殊的符號(hào),用以表示數(shù)據(jù)的運(yùn)算、賦值和比較等。?

1) 算術(shù)運(yùn)算符 (+, -, * , / , %)?

2) 賦值運(yùn)算符 (= += -= ..)?

3) 關(guān)系運(yùn)算符(比較運(yùn)算符)(比如 > >= < <= == 等等)?

4) 邏輯運(yùn)算符 (&& 邏輯與 || 邏輯或 ! 邏輯非)?

5) 位運(yùn)算符 (& 按位與 | 按位或 ^ 按位異或 ~ 按位取反等等)?

6) 三元運(yùn)算符 ( 表達(dá)式 ? 表達(dá)1 : 表達(dá)2)


算術(shù)運(yùn)算符:

介紹:算術(shù)運(yùn)算符是對(duì)數(shù)值類型的變量進(jìn)行運(yùn)算的,在C程序中使用的非常多。

案例演示:案例演示算術(shù)運(yùn)算符的使用(operator.c)。?

1) +, - , * , / , %, ++, -- , 重點(diǎn)講解 /、%、++?

2) 自增:++ 作為獨(dú)立的語句使用: 前++和后++都完全等價(jià)于 i=i+1; 作為表達(dá)式使用 前++:++i先自增后賦值 后++:i++先賦值后自增?

3) -- ,+、-、* 是一個(gè)道理,完全可以類推。


細(xì)節(jié)說明:

1) 對(duì)于除號(hào)“/”,它的整數(shù)除和小數(shù)除是有區(qū)別的:整數(shù)之間做除法時(shí),只保留整數(shù) 部分而舍棄小數(shù)部分。 例如:int x= 10/3 ,結(jié)果是 3?

2) 當(dāng)對(duì)一個(gè)數(shù)取模時(shí),可以等價(jià) a%b=a-a/b*b , 這樣我們可以看到 取模的一個(gè)本質(zhì) 運(yùn)算。 3) 當(dāng) 自增 當(dāng)做一個(gè)獨(dú)立語言使用時(shí),不管是 ++i; 還是 i++; 都是一樣的,等價(jià)?

4) 當(dāng) 自增 當(dāng)做一個(gè) 表達(dá)式使用時(shí) j = ++i 等價(jià) i = i + 1; j = i;?

5) 當(dāng) 自增 當(dāng)做一個(gè) 表達(dá)式使用時(shí) j = i++ 等價(jià) j = i; i = i + 1;

自增,自減課堂練習(xí):

void main() {?

int i1 = 10, i2 = 20;?

int i = i1++;//i =10, i1=11?

printf("i=%d\n",i);// 10?

printf("i1=%d\n", i1);//11?

i = ++i1;?

printf("i=%d\n", i);//12?

printf("i1=%d\n", i1);//12?

i = i2--;?

printf("i=%d\n",i);// 20?

printf("i2=%d\n",i2);//19?

i = --i2;?

printf("i=%d\n", i);//18?

printf("i2=%d\n", i2);//18?

getchar();?

}

輸出結(jié)果:?

i= 10 i1= 11 ?

i= 12 i1= 12?

i= 20 i2= 19?

i= 18 i2= 18

課堂練習(xí)2:

1) 假如還有97天放假,問:xx個(gè)星期零xx天?

2) 定義一個(gè)變量保存華氏溫度,華氏溫度轉(zhuǎn)換攝氏溫度的公式為:5/9*(華氏 溫度-100),請(qǐng)求出華氏溫度對(duì)應(yīng)的攝氏溫度。


我的源碼:

/*

練習(xí)要求:

1.假如還有99天放假,問:還有xx個(gè)星期零xx天

2.定義一個(gè)變量保存華氏溫度,華氏溫度轉(zhuǎn)攝氏溫度的公式:5/9 * (華氏溫度-100),請(qǐng)求出華氏溫度對(duì)應(yīng)的攝氏溫度。

*/

#include <stdio.h>

void main(){

//1思路:

//1.定義一個(gè)變量 days 保存天數(shù)

//2.定義一個(gè)變量 week 保存計(jì)算得到的星期

//3.定義一個(gè)變量 leftDays 保存剩余天數(shù)

//4.要使用 % 和 / 來計(jì)算


short days = 99;

short week = days / 7;

short leftDays = days % 7;


//2思路略過

double huaShi = 13;

double sheShi = 5.0 / 9 * (huaShi - 100);// 5.0/9,不然輸出都是0(5/9等于0)


printf("還有%d個(gè)星期零%d天放假\n",week,leftDays);

printf("華氏溫度%.3f轉(zhuǎn)為攝氏溫度是%.3f\n",huaShi,sheShi);

getchar();

}


關(guān)系運(yùn)算符(比較運(yùn)算符)?

介紹:

1) 關(guān)系運(yùn)算符的結(jié)果 要么是真(非0 表示),要么是 假(0 表示)?

2) 關(guān)系表達(dá)式 經(jīng)常用在 if結(jié)構(gòu)的條件中或循環(huán)結(jié)構(gòu)的條件中

細(xì)節(jié)說明:

1) 關(guān)系運(yùn)算符的結(jié)果要么是真(非0 表示, 默認(rèn)使用1),要么是 假(0 表示) ?

2) 關(guān)系運(yùn)算符組成的表達(dá)式,我們稱為關(guān)系表達(dá)式。 a > b ?

3) 比較運(yùn)算符 "=="(關(guān)系運(yùn)算符) 不能誤寫成 "=" (賦值)


我的源碼:

/*

關(guān)系運(yùn)算符 也叫 比較運(yùn)算符

1.關(guān)系運(yùn)算符的結(jié)果 要么是真(非0表示,默認(rèn)使用1表示),要么是假(用0表示)

2.關(guān)系運(yùn)算符組成的表達(dá)式,我們稱為關(guān)系表達(dá)式。如 a > b

3.比較運(yùn)算符 ==(關(guān)系運(yùn)算符) 不能寫成 =(賦值)

*/

#include <stdio.h>

void main(){

int a = 13;

int b = 3;


printf("關(guān)系表達(dá)式 a>b 的值是%d\n",a > b);//1

printf("關(guān)系表達(dá)式 a>=b 的值是%d\n",a >= b);//1

printf("關(guān)系表達(dá)式 a<b 的值是%d\n",a < b);//0

printf("關(guān)系表達(dá)式 a<=b 的值是%d\n",a <= b);//0

printf("關(guān)系表達(dá)式 a==b 的值是%d\n",a == b);//0

printf("關(guān)系表達(dá)式 a!=b 的值是%d\n",a != b);//1


getchar();

}


邏輯運(yùn)算符:

介紹:用于連接多個(gè)條件(一般來講就是關(guān)系表達(dá)式),最終的結(jié)果要么是真(非0 ?表示),要么是 假(0 表示) 。

練習(xí)題2:請(qǐng)寫輸出結(jié)果?

void main() {?

int x=1;?

int y=0;?

short z=42;?

if((z++==42)&&(y=1)) {?// z = 43 , y =1?

z++; // z = 44?

????}?

if((x=0) || (++z==45)) { // z = 45?

z++; // z = 46?

????}?

printf("z=%d", z); // z 為46?

getchar();?

} 結(jié)果為:z 為 46

我的源碼:

/*

邏輯運(yùn)算符 (&& || !三個(gè))

用于連接多個(gè)條件(一般來講就是關(guān)系表達(dá)式),最終結(jié)果要么是真(非0表示),要么是假(0表示)

*/

#include <stdio.h>

void main(){

//int a = 10,b=99;

//if(a<20 && b++>100){

// printf("OK100");//不會(huì)輸出

//}

//printf("b=%d\n",b);//輸出b=100


//int a = 10,b=99;

//if(a<2 && ++b>99){

// printf("OK100\n");//也不會(huì)輸出

//}

//printf("b=%d\n",b);//輸出b=99


//1.在就行 && 操作時(shí),如果第一個(gè)條件為false,則后面的條件不再判斷,整個(gè)結(jié)果為false

//2.該現(xiàn)象稱為 短路現(xiàn)象,所以邏輯與 也稱為 短路邏輯與


//int a = 10,b=99;

//if(a<5 || b++>100){

// printf("@@@OK100@@@\n");//不會(huì)輸出

//}

//printf("b=%d\n",b);//輸出b=100


//int a = 10,b=99;

//if(a>5 || b++>100){

// printf("@@@OK100@@@\n");//輸出@@@OK100@@@

//}

//printf("b=%d\n",b);//輸出b=99


//1.在就行 || 操作時(shí),如果第一個(gè)條件為true,則后面的條件不再判斷,整個(gè)結(jié)果為真

//2.該現(xiàn)象稱為 短路現(xiàn)象,所以邏輯或 也稱為 短路邏輯或


//邏輯非

int score = 100;

int res = score < 99;//res=0

if(res){

printf("Hello Tom\n");

}


if(!res){

printf("Hello Jack\n");

}

getchar();

}


#include <stdio.h>

void main(){

int x=1;

int y=0;

short z=42;

//下面if語句的 賦值語句寫在前面不需要括號(hào),寫在后面需要括號(hào)。優(yōu)先級(jí)問題

if(z++==42 && (y=1)){//z=43,y=1

z++;//z=44

}


if(x=0 || ++z==45){//x=0為假,z=45

z++;//z=46

}

printf("z=%d\n",z);

getchar();

}


賦值運(yùn)算符:

介紹:賦值運(yùn)算符就是將 某個(gè)運(yùn)算后的值, 賦給指定的變量。 賦值運(yùn)算符一覽表 先講 =、+=、-=、 *= 、/=、%=?

<<=、>>=、&=、^=、 |= 和位運(yùn)算相關(guān),放 在后面講解


運(yùn)算符 ????????描述 ????????實(shí)例?

= 簡單的賦值運(yùn)算符,把右邊操作數(shù)的值賦給左邊操作數(shù) C = A + B 將把 A + B 的值賦給?

+= 加且賦值運(yùn)算符,把右邊操作數(shù)加上左邊操作數(shù)的結(jié)果賦值給左 邊操作數(shù) C += A 相當(dāng)于 C = C + A?

-= 減且賦值運(yùn)算符,把左邊操作數(shù)減去右邊操作數(shù)的結(jié)果賦值給左 邊操作數(shù) C -= A 相當(dāng)于 C = C - A?

*= 乘且賦值運(yùn)算符,把右邊操作數(shù)乘以左邊操作數(shù)的結(jié)果賦值給左 邊操作數(shù) C *= A 相當(dāng)于 C = C * A /= 除且賦值運(yùn)算符,把左邊操作數(shù)除以右邊操作數(shù)的結(jié)果賦值給左 邊操作數(shù) C?

/= A 相當(dāng)于 C = C / A %= 求模且賦值運(yùn)算符,求兩個(gè)操作數(shù)的模賦值給左邊操作數(shù) C %= A 相當(dāng)于 C = C % A?

<<= 左移且賦值運(yùn)算符 C <<= 2 等同于 C = C << 2?

>>= 右移且賦值運(yùn)算符 C >>= 2 等同于 C = C >> 2?

&= 按位與且賦值運(yùn)算符 C &= 2 等同于 C = C & 2?

^= 按位異或且賦值運(yùn)算符 C ^= 2 等同于 C = C ^ 2?

|= 按位或且賦值運(yùn)算符 C |= 2 等同于 C = C | 2

案例演示:

案例演示賦值運(yùn)算符的基本使用。?

1) 賦值基本案例 [int num1 = 10 + 3]?

2) 有兩個(gè)變量,a和b,要求將其進(jìn)行交換,最終打印結(jié)果?

3) += 的使用案例?

賦值運(yùn)算符特點(diǎn):

(1) 運(yùn)算順序從右往左?

(2) 賦值運(yùn)算符的左邊 只能是變量,右邊 可以是變量、表達(dá)式、常量值?

(3) 復(fù)合賦值運(yùn)算符等價(jià)于下面的效果 比如:a+=3;等價(jià)于a=a+3;

我的源碼:

/*

賦值運(yùn)算符:

就是將某個(gè)運(yùn)算后的值,賦給指定的變量

有:= +=... <<=...

簡單略過,

<<= 左移且賦值運(yùn)算符 (c<<=2 等同于 c=c << 2)

>>= 右移且賦值運(yùn)算符

&= 按位與且賦值運(yùn)算符

^= 按位異或且賦值運(yùn)算符

|= 按位或且賦值運(yùn)算符(c |=2 等同于 c = c | 2)

*/


/*

運(yùn)算順序 從右往左

賦值運(yùn)算符 左邊只能是變量,右邊可以是變量,表達(dá)式,常量值

注意:在運(yùn)算時(shí),可能截?cái)嘈?shù)點(diǎn)后面的部分

*/


#include <stdio.h>

void main(){

//int a1 = 10;

//int b1 = 11.1;

//a1+=1.7;

//printf("a1=%d b1=%d\n",a1,b1);//a1=11 b1=11


//有兩個(gè)變量,a和b,要求進(jìn)行交換,打印結(jié)果

int a = 13;

int b = 1313;

int temp = a;

a = b;

b = temp;

printf("a=%d b=%d\n",a,b);//a=1313 b=13

getchar();

}

位運(yùn)算符

介紹:位運(yùn)算符作用于位, 并逐位執(zhí)行操作。 位運(yùn)算符一覽表 要徹底搞懂位運(yùn)算, 需要先學(xué)習(xí)二進(jìn)制, 因此位運(yùn)算,我們 放在二進(jìn)制后講解


運(yùn)算符 ????????描述 ????????實(shí)例?

& 按位與操作,按二進(jìn)制位進(jìn)行"與"運(yùn)算。運(yùn)算規(guī)則: 0&0=0; 0&1=0; 1&0=0; 1&1=1;?

(A & B) 將得到 12,即為 0000 1100?

| 按位或運(yùn)算符,按二進(jìn)制位進(jìn)行"或"運(yùn)算。運(yùn)算規(guī)則: 0|0=0; 0|1=1; 1|0=1; 1|1=1;?

(A | B) 將得到 61,即為 0011 1101?

^ 異或運(yùn)算符,按二進(jìn)制位進(jìn)行"異或"運(yùn)算。運(yùn)算規(guī)則: 0^0=0; 0^1=1; 1^0=1; 1^1=0;?

(A ^ B) 將得到 49,即為 0011 0001?

~ 取反運(yùn)算符,按二進(jìn)制位進(jìn)行"取反"運(yùn)算。運(yùn)算規(guī)則: ~1=0; ~0=1;?

(~A ) 將得到 -61,即為 1100 0011, 一個(gè)有符號(hào)二進(jìn)制數(shù)的補(bǔ)碼形式。?

<< 二進(jìn)制左移運(yùn)算符。將一個(gè)運(yùn)算對(duì)象的各二進(jìn)制位 全部左移若干位(左邊的二進(jìn)制位丟棄,右邊補(bǔ)0)。 A << 2 將得到 240,即為 1111 0000?

>> 二進(jìn)制右移運(yùn)算符。將一個(gè)數(shù)的各二進(jìn)制位全部右 移若干位,正數(shù)左補(bǔ)0,負(fù)數(shù)左補(bǔ)1,右邊丟棄。 A >> 2 將得到 15,即為 0000 1111

我的源碼:

/*

進(jìn)制介紹

1.二進(jìn)制:0,1,滿2進(jìn)1,C語言中沒有二進(jìn)制常數(shù)的表示方法。

2.十進(jìn)制:0~9,滿10進(jìn)1。

3.八進(jìn)制:0~7,滿8進(jìn)1。以數(shù)字0開頭。

4.十六進(jìn)制:0~9和A~F,滿16進(jìn)1。以0x或0X開頭表示。此處A~F不區(qū)分大小寫?!続->10,b->11,...f->15】

--0x13bF + 1 ==0x13C0

*/


/*

進(jìn)制轉(zhuǎn)換:

其他進(jìn)制轉(zhuǎn)為十進(jìn)制:0x1dcf==>1*16^3 + d*16^2 + c*16 + f = 7631。其他一樣,位數(shù) * 位權(quán)


十進(jìn)制轉(zhuǎn)為其它進(jìn)制:用短除法,比如十進(jìn)制->十六進(jìn)制【一直除以16,直到商為0,再把余數(shù)倒過來寫】


二進(jìn)制轉(zhuǎn)為8、16進(jìn)制:3位二進(jìn)制對(duì)應(yīng)1wei八進(jìn)制,4位二進(jìn)制對(duì)應(yīng)1位十六進(jìn)制【把它算出來,位*位權(quán) 對(duì)應(yīng) 寫成一個(gè)數(shù)】

11 100 101-->八進(jìn)制--> 3 4 5

11 1001 0110-->十六進(jìn)制--> 3 9 6


八、十六進(jìn)制轉(zhuǎn)為二進(jìn)制:和二進(jìn)制轉(zhuǎn)為8、16進(jìn)制類似,反過來看就行

01230-->二進(jìn)制-->001 010 011 000

0xAB29-->二進(jìn)制-->1010 1011 0010 1001

*/


/*

【原碼、反碼、補(bǔ)碼】

1.二進(jìn)制的最高位是符號(hào)位,0表示正數(shù),1表示負(fù)數(shù)

2.正數(shù)的原碼、反碼、補(bǔ)碼都一樣(三碼合一)

3.負(fù)數(shù)的反碼 = 它的原碼符號(hào)位不變,其它位全部取反(0-->1,1-->0)

4.負(fù)數(shù)的補(bǔ)碼 = 它的反碼 + 1

5.0的反碼,補(bǔ)碼都是0

6.在計(jì)算機(jī)運(yùn)算的時(shí)候,【都是以補(bǔ)碼的方式來運(yùn)算的】。但是最終結(jié)果顯示,需要把補(bǔ)碼轉(zhuǎn)為原碼

*/


/*

【位運(yùn)算當(dāng)然和邏輯運(yùn)算符 不一樣】

按位與(&),規(guī)則:兩邊都為1,才為1【0&0=0,1&1=1,0&1=0,1&0=0】

按位或(|),規(guī)則:兩邊有1為1【0|0=0,1|1=1,0|1=1,1|0=1】

按位異或(^),規(guī)則:兩邊相同為0,不同為1【0^0=0,1^1=0,0^1=1,1^0=1】

按位取反(~),規(guī)則:兩邊取反【~1=0,~0=1】


【最終顯示是原碼,補(bǔ)碼最終都要轉(zhuǎn)為原碼】【一句話補(bǔ)碼計(jì)算,原碼最終顯示】

/*


/*

位運(yùn)算例子:【int有4個(gè)字節(jié),下面是一個(gè)字節(jié)的【懶得補(bǔ)完整】,算出結(jié)果都一樣】

~2 = -3;//二進(jìn)制為 0000 0010 -->反碼 0000 0010 -->補(bǔ)碼 0000 0010 --》對(duì)補(bǔ)碼取反 1111 1101--》還原為原碼 1000 0011--》-3

~-2 = 1;//二進(jìn)制為 1000 0010 -->反碼 1111 1101-->補(bǔ)碼 1111 1110--》對(duì)補(bǔ)碼取反 0000 0001--》還原為原碼 0000 0001--》1

~-5 = 4;//二進(jìn)制為 1000 0101 -->反碼 1111 1010-->補(bǔ)碼 1111 1011--》對(duì)補(bǔ)碼取反 0000 0100--》還原為原碼 0000 0100--》4


2 & -3 = 0;//2的二進(jìn)制為 0000 0010(補(bǔ)碼一樣)。-3的二進(jìn)制為 1000 0011(補(bǔ)碼 1111 1101)--> 0000 0010 & 1111 1101 =》0000 0000-->還原為原碼 0

2 | 3 = 3;//2的二進(jìn)制為 0000 0010(補(bǔ)碼一樣)。3的二進(jìn)制為 0000 0011(補(bǔ)碼一樣)--> 0000 0010 | 0000 0011 =》0000 0011-->還原為原碼(正數(shù)原碼一樣)--》3

2 ^ 3 = 1;//2的二進(jìn)制為 0000 0010(補(bǔ)碼一樣)。3的二進(jìn)制為 0000 0011(補(bǔ)碼一樣)--> 0000 0010 ^ 0000 0011 =》0000 0001-->還原為原碼(正數(shù)原碼一樣)--》1


*/


/*

二進(jìn)制左移(<<),規(guī)則:將二進(jìn)制全部左移若干位【右邊補(bǔ)0,左邊二進(jìn)制位丟棄】

二進(jìn)制右移(>>),規(guī)則:將二進(jìn)制全部右移若干位【(正數(shù)左邊補(bǔ)0,負(fù)數(shù)左邊補(bǔ)1),右邊丟棄】(補(bǔ)0和1 是因?yàn)?,不能改變?shù)的符號(hào))


【位運(yùn)算說明2】

<< 叫算術(shù)左移。規(guī)則:符號(hào)位不變,低位補(bǔ)0

>> 叫算術(shù)右移。規(guī)則:低位溢出,符號(hào)位不變,并用符號(hào)位 補(bǔ)溢出的高位。


*/


/*

例子2://照樣4個(gè)字節(jié),只寫其中的1個(gè)字節(jié)

1 >> 3? // (正數(shù)相當(dāng)于除以3個(gè)2-->1/2/2=0)【左移就是乘3個(gè)2,2是權(quán)重,但是負(fù)數(shù)不能這樣算,因?yàn)樨?fù)數(shù)補(bǔ)碼和原碼不一樣】

int a = 1 >> 2;//1的補(bǔ)碼 0000 0001-->右移2位--> 0000 0000--》0

int b = -1 >> 2;//-1的補(bǔ)碼 1111 1111-->右移2位-->1111 1111-->原碼 1000 0001--》-1

int c = 1 << 3;// 0000 0001-->左移3位--> 0000 1000--》8【相當(dāng)于1*2*2*2=8】

int d = -3 << 3;//-3補(bǔ)碼1111 1101--左移3位-->1110 1000-->原碼 1001 1000 --》-24


~6;

~-7;

13 & 7;

5 | 4;

-3 ^ 3;

*/


//1000 0000 0000 0001

//反碼:1111 1111 1111 1110

//補(bǔ)碼:1111 1111 1111 1111



#include <stdio.h>

int main(){

//int num = 011;

//int num2 = 0X13bf + 1;

//printf("num=%d num2=%d",num,num2);//num=9 num2=5056


int num1 = ~2;//-3

int num2 = ~-2;//1

int num3 = ~-5;//4


int num4 = 2 & -3;//0

int num5 = 2 | 3;//3

int num6 = 2 ^ 3;//1


int a = 1 >> 2;//0

int b = -1 >> 2;//-1

int c = 1 << 3;//8

int d = -3 << 3;//-24


printf("num1=%d num2=%d num3=%d num4=%d num5=%d num6=%d\n",num1,num2,num3,num4,num5,num6);


printf("a=%d b=%d c=%d d=%d",a,b,c,d);

getchar();

}


三元運(yùn)算符

基本語法:條件表達(dá)式 ? 表達(dá)式1: 表達(dá)式2;?

1) 如果條件表達(dá)式為非0 (真),運(yùn)算后的結(jié)果是表達(dá)式1;?

2) 如果條件表達(dá)式為0 (假),運(yùn)算后的結(jié)果是表達(dá)式2;?

3) 口訣: 一燈大師 =》 一真大師?


使用細(xì)節(jié):

1) 表達(dá)式1和表達(dá)式2要為可以賦給接收變量的類型(或可以自動(dòng)轉(zhuǎn)換), 否則 會(huì)有精度損失?

2) 三元運(yùn)算符可以轉(zhuǎn)成if--else 語句?

int res = a > b ? a++ : --b; // if ... else ..?

課堂練習(xí):

案例1:實(shí)現(xiàn)兩個(gè)數(shù)的最大值 (a , b )?

int a = 10;?

int b = 99;?

int res = a > b ? a++ : b--;

案例2:實(shí)現(xiàn)三個(gè)數(shù)的最大值?

int a = 10;?

int b = 100;?

int c = 199;?

int max = a > b ? a : b

運(yùn)算符優(yōu)先級(jí)?

運(yùn)算符優(yōu)先級(jí)小結(jié):?

1) 結(jié)合的方向只有三個(gè)是從右向左,其余都是從左向右?

2) 所有的雙目運(yùn)算符中只有賦值運(yùn)算符的結(jié)合方向是從右向左?

3) 另外兩個(gè)從右向左的結(jié)合運(yùn)算符,一個(gè)是單目運(yùn)算,還有一個(gè)是三目運(yùn)算()?

4) 逗號(hào)的運(yùn)算符優(yōu)先級(jí)最低?

5) 說一下優(yōu)先級(jí)的大概的順序 算術(shù)運(yùn)算符 > 關(guān)系運(yùn)算符 > 邏輯運(yùn)算符(邏輯 非! 除外) > 賦值運(yùn)算符 > 逗號(hào)運(yùn)算符?

6) 注意不需要刻意的記, 常用就慢慢有印象


優(yōu)先級(jí)問題 ????表達(dá)式 ????經(jīng)常誤認(rèn)為的結(jié)果???? 實(shí)際結(jié)果 (紅色標(biāo)注)

. 的優(yōu)先級(jí)高于 *(-> 操作符 用于消除這個(gè)問題)? ?*p.f ?? ?p 所指對(duì)象的字段 f,等價(jià)于: (*p).f?????對(duì) p 取 f 偏移,作為指針, 然后進(jìn)行解除引用操作,等 價(jià)于: *(p.f)?

[] 高于 * ????int *ap[] ????ap 是個(gè)指向 int 數(shù)組的指針, 等價(jià)于: int (*ap)[] ????ap 是個(gè)元素為 組,等價(jià)于: int *(ap [])?

函數(shù)?() 高于 * ????int *fp()???? fp 是個(gè)函數(shù)指針,所指函數(shù) 返回 int,等價(jià)于: int (*fp)() ????fp 是個(gè)函數(shù),返回 價(jià)于: int* ( fp() )?

== 和 != 高于位操作 ????(val & mask != 0) ????(val &mask) != 0 ????val & (mask != 0)?

== 和 != 高于賦值符???? c = getchar() != EOF ????(c = getchar()) != EOF???? c = (getchar() != EOF)?

算術(shù)運(yùn)算符高于位移運(yùn)算符???? msb << 4 + lsb????? (msb << 4) + lsb ????msb << (4 + lsb)?

逗號(hào)運(yùn)算符在所有運(yùn)算符中 優(yōu)先級(jí)最低 ????i = 1, 2??????i = (1,2)??????(i = 1), 2


運(yùn)算符優(yōu)先級(jí)注 意事項(xiàng)和細(xì)節(jié):?

上表中,優(yōu)先級(jí)同 為1 的幾種運(yùn)算符 如果同時(shí)出現(xiàn),那 怎么確定表達(dá)式的 優(yōu)先級(jí)呢?這里我 們專門說明一把


我的源碼:

/*

位運(yùn)算后面講

三元運(yùn)算符,基本語法:

1.如果 條件表達(dá)式 為非0(真),運(yùn)算后的結(jié)果是 表達(dá)式1

2.如果 條件表達(dá)式 為0(假),運(yùn)算后的結(jié)果是 表達(dá)式2

*/


/*

細(xì)節(jié):

1.表達(dá)式1和表達(dá)式2 要為 可以賦給接收變量的類型(或可以自動(dòng)轉(zhuǎn)換),否則會(huì)有精度損失

2.三元運(yùn)算符可以轉(zhuǎn)換為 if-else語句

*/


#include <stdio.h>

void main(){

//int a = 13;

//int b = 1313;

//int c = 131313;

//int max = a > b ? a : b;

//int max2 = (a>b?a:b)>c?(a>b?a:b):c;//建議使用中間變量max寫,簡短一點(diǎn)

//

//printf("兩個(gè)數(shù)的最大值是 %d\n",max);//1313

//

//printf("三個(gè)數(shù)的最大值是 %d\n",max2);//131313


int a =13;

int b = 1313;

int res = a > b ? a++ : b--;

int n1 = a > b? 1.1 : 1.2;//警告:從“double”轉(zhuǎn)換到“int”,可能丟失數(shù)據(jù)

printf("\na=%d b=%d res=%d",a,b,res);//a=13 b=1312 res=1313

getchar();

}


/*

運(yùn)算符優(yōu)先級(jí) (不知道的就查表)

運(yùn)算符優(yōu)先級(jí)小結(jié)

1.結(jié)合方向只有3個(gè)從右向左,其余都是從左往右

2.所有雙目運(yùn)算符(就是兩個(gè)操作數(shù)那種 + - * /...),只有賦值運(yùn)算符是 從右向左

3.另外兩個(gè) 從右向左的運(yùn)算符,一個(gè)是單目運(yùn)算,還有一個(gè)是三目運(yùn)算

4.逗號(hào)的運(yùn)算符優(yōu)先級(jí)最低

5.大概順序:算數(shù)運(yùn)算符 > 關(guān)系運(yùn)算符 > 邏輯運(yùn)算符(邏輯非(!) 除外) > 賦值運(yùn)算符 > 逗號(hào)運(yùn)算符

---同1級(jí)別優(yōu)先級(jí)時(shí):. 高于 *(指針取值的*),[] 高于 *,函數(shù)() 高于 *,==和!=高于位操作、也高于賦值符,算術(shù)運(yùn)算符 高于 位移運(yùn)算符,逗號(hào)在所有運(yùn)算符優(yōu)先級(jí)最低

6.不需要刻意背,多用就有印象了

*/


P5.運(yùn)算符的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
保康县| 惠来县| 永安市| 安化县| 怀安县| 海盐县| 抚州市| 瑞昌市| 德惠市| 玉林市| 莱芜市| 万宁市| 岑巩县| 彭阳县| 若尔盖县| 台中市| 平阳县| 虎林市| 昭苏县| 思茅市| 舞阳县| 广州市| 乐都县| 建阳市| 内江市| 昌都县| 都昌县| 于田县| 大姚县| 庄浪县| 犍为县| 新昌县| 固原市| 香河县| 通渭县| 永州市| 金溪县| 肥乡县| 双牌县| 岚皋县| 娱乐|