




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第C語(yǔ)言全面細(xì)致精講操作符的使用目錄前言一、算術(shù)操作符二、移位操作符1.左移操作符2.右移操作符三、位操作符四、賦值操作符復(fù)合賦值符五、單目操作符單目操作符介紹1.sizeof和數(shù)組2.++和運(yùn)算符六、關(guān)系操作符七、邏輯操作符八、條件操作符九、逗號(hào)表達(dá)式十、下標(biāo)引用與函數(shù)調(diào)用和結(jié)構(gòu)成員1.[]下標(biāo)引用操作符2.()函數(shù)調(diào)用操作符3.訪問(wèn)一個(gè)結(jié)構(gòu)的成員
前言
本次文章我們要講各種操作符的介紹,內(nèi)容非常詳細(xì),大家拭目以待哦!
首先介紹操作符的種類
操作符分類:
算術(shù)操作符移位操作符位操作符賦值操作符單目操作符關(guān)系操作符邏輯操作符條件操作符逗號(hào)表達(dá)式下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員
一、算術(shù)操作符
+-*/%
除了%操作符之外,其他的幾個(gè)操作符可以作用于整數(shù)和浮點(diǎn)數(shù)。對(duì)于/操作符如果兩個(gè)操作數(shù)都為整數(shù),執(zhí)行整數(shù)除法。而只要有浮點(diǎn)數(shù)執(zhí)行的就是浮點(diǎn)數(shù)除法。%操作符的兩個(gè)操作數(shù)必須為整數(shù)。返回的是整除之后的余數(shù)。
二、移位操作符
左移操作符
右移操作符
注:移位操作符的操作數(shù)只能是整數(shù)。
1.左移操作符
移位規(guī)則:左邊拋棄、右邊補(bǔ)0
//10下面是在二進(jìn)制中那個(gè)的表示形式
//0000000000000000000000000000000000001010
//左移一位
//0000000000000000000000000000000000010100
2.右移操作符
移位規(guī)則:
首先右移運(yùn)算分兩種:
1.邏輯移位
左邊用0填充,右邊丟棄
2.算術(shù)移位
左邊用原該值的符號(hào)位填充,右邊丟棄
//我們假設(shè)用-1來(lái)舉例子
//-1在二進(jìn)制中表示為32個(gè)1
//11111111111111111111111111111111
//邏輯右移
//01111111111111111111111111111111
//算術(shù)右移
//11111111111111111111111111111111
警告:
對(duì)于移位運(yùn)算符,不要移動(dòng)負(fù)數(shù)位,這個(gè)是標(biāo)準(zhǔn)未定義的。
例如:
intnum=10;
num-1;//error
三、位操作符
位操作符有:
//按位與
|//按位或
^//按位異或
注:他們的操作數(shù)必須是整數(shù)。
練習(xí)一下:
intmain(){
//按(2進(jìn)制)位與
//|按(2進(jìn)制)位或
//^按(2進(jìn)制)位異或
inta=3;
intb=-5;
intc=a
//000000000000000000000000000000113的補(bǔ)碼
//10000000000000000000000000000101-5原碼
//11111111111111111111111111111010反碼
//11111111111111111111111111111011補(bǔ)碼
//000000000000000000000000000000113的補(bǔ)碼
//00000000000000000000000000000011//按位與全1為1其他位0
printf("%d\n",c);
intd=a|b;
//11111111111111111111111111111011補(bǔ)碼
//000000000000000000000000000000113的補(bǔ)碼
//11111111111111111111111111111011補(bǔ)碼
//10000000000000000000000000000100
//10000000000000000000000000000101
printf("%d\n",d);
inte=a^b;
//11111111111111111111111111111011補(bǔ)碼
//000000000000000000000000000000113的補(bǔ)碼
//11111111111111111111111111111000
//10000000000000000000000000000111
//10000000000000000000000000001000
printf("%d\n",e);
return0;
}
一道變態(tài)的面試題:
不能創(chuàng)建臨時(shí)變量(第三個(gè)變量),實(shí)現(xiàn)兩個(gè)數(shù)的交換
intmain(){
inta=3;
intb=5;
//printf("交換前a=%d,b=%d\n",a,b);
//a=a+b;
//b=a-b;
//a=a-b;
//printf("交換前a=%d,b=%d\n",a,b);
printf("交換前a=%d,b=%d\n",a,b);
//方法二
a=a^b;//3^5
b=a^b;//3^5^5=3
a=a^b;//3^5^3=5
printf("交換后a=%d,b=%d\n",a,b);
return0;
練習(xí):
編寫代碼實(shí)現(xiàn):求一個(gè)整數(shù)存儲(chǔ)在內(nèi)存中的二進(jìn)制中1的個(gè)數(shù)。
intmain(){
intm=15;
inti=0;
intcount=0;
while(i32)
if(((mi)1)==1)
count++;
i++;
printf("count:%d\n",count);
return0;
分別用每一位與1
這一位是1運(yùn)算后的結(jié)果就是1
四、賦值操作符
賦值操作符是一個(gè)很棒的操作符,他可以讓你得到一個(gè)你之前不滿意的值。也就是你可以給自己重新賦值
intweight=120;//體重
weight=89;//不滿意就賦值
doublesalary=10000.0;
salary=20000.0;//使用賦值操作符賦值。
賦值操作符可以連續(xù)使用,比如:
inta=10;
intx=0;
inty=20;a=x=y+1;//連續(xù)賦值
這樣的代碼感覺(jué)怎么樣?
那同樣的語(yǔ)義,你看看:
x=y+1;a=x;
這樣的寫法是不是更加清晰爽朗而且易于調(diào)試。
復(fù)合賦值符
+=
-=
*=
/=
%=
=
=
=
|=
^=
這些運(yùn)算符都可以寫成復(fù)合的效果。
比如:
intx=10;x=x+10;x+=10;//復(fù)合賦值
//其他運(yùn)算符一樣的道理。這樣寫更加簡(jiǎn)潔。
五、單目操作符
單目操作符介紹
!邏輯反操作
-負(fù)值
+正值
取地址
sizeof操作數(shù)的類型長(zhǎng)度(以字節(jié)為單位)
~對(duì)一個(gè)數(shù)的二進(jìn)制按位取反
--前置、后置--
++前置、后置++
*間接訪問(wèn)操作符(解引用操作符)(類型)強(qiáng)制類型轉(zhuǎn)換
演示代碼:
#includestdio.h
intmain()
inta=-10;
int*p=NULL;
printf("%d\n",!2);
printf("%d\n",!0);
a=-a;
p=
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(int));
printf("%d\n",sizeofa);//這樣寫行不行?
printf("%d\n",sizeofint);//這樣寫行不行?//結(jié)果是不行
//其實(shí)我們從這里就可以看出sizeof不是一個(gè)函數(shù)
return0;
}
關(guān)于sizeof其實(shí)我們之前已經(jīng)見(jiàn)過(guò)了,可以求變量(類型)所占空間的大小。
1.sizeof和數(shù)組
#includestdio.h
voidtest1(intarr[])
printf("%d\n",sizeof(arr));//(2)//這里是指針,因?yàn)閭鬟^(guò)來(lái)的是地址要拿指針接收在32為機(jī)器下字節(jié)為4
voidtest2(charch[])
printf("%d\n",sizeof(ch));//(4)//同理//這里是指針,因?yàn)閭鬟^(guò)來(lái)的是地址要拿指針接收在32為機(jī)器下字節(jié)為4
intmain()
intarr[10]={0};
charch[10]={0};
printf("%d\n",sizeof(arr));//(1)//40
printf("%d\n",sizeof(ch));//(3)//10
test1(arr);
test2(ch);
return0;
}
問(wèn):
(1)、(2)兩個(gè)地方分別輸出多少?
(3)、(4)兩個(gè)地方分別輸出多少?
2.++和運(yùn)算符
//前置++和--
#includestdio.h
intmain()
inta=10;
intx=++a;
//先對(duì)a進(jìn)行自增,然后對(duì)使用a,也就是表達(dá)式的值是a自增之后的值。x為11。
inty=--a;
//先對(duì)a進(jìn)行自減,然后對(duì)使用a,也就是表達(dá)式的值是a自減之后的值。y為10;
return0;
}
//后置++和--
#includestdio.h
intmain()
inta=10;
intx=a++;
//先對(duì)a先使用,再增加,這樣x的值是10;之后a變成11;
inty=a--;
//先對(duì)a先使用,再自減,這樣y的值是11;之后a變成10;
return0;}
六、關(guān)系操作符
關(guān)系操作符
=
=
!=用于測(cè)試不相等
==用于測(cè)試相等
這些關(guān)系運(yùn)算符比較簡(jiǎn)單,沒(méi)什么可講的,但是我們要注意一些運(yùn)算符使用時(shí)候的陷阱。
警告:
在編程的過(guò)程中==和=不小心寫錯(cuò),導(dǎo)致的錯(cuò)誤。
七、邏輯操作符
邏輯操作符有哪些:
邏輯與
||邏輯或
區(qū)分邏輯與和按位與
區(qū)分邏輯或和按位或
12-----0
12----1
1|2-----3
1||2----1
接下來(lái)我們引入一道360的面試題
#includestdio.h
intmain()
inti=0,a=0,b=2,c=3,d=4;
i=a++++bd++;
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
return0;}
//程序輸出的結(jié)果是什么?
這里邏輯且運(yùn)算碰到錯(cuò)誤直接結(jié)束,后面的運(yùn)算就不再繼續(xù)
而邏輯或運(yùn)算碰到正確直接結(jié)束,后面的運(yùn)算就不再繼續(xù)
intmain()
inti=0,a=0,b=2,c=3,d=4;
i=a++||++b||d++;
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
return0;
//程序輸出的結(jié)果是什么?
八、條件操作符
exp1exp2:exp3
練習(xí):
1.
if(a5)
b=3;
else
b=-3;
轉(zhuǎn)換成條件表達(dá)式,是什么樣?
2.使用條件表達(dá)式實(shí)現(xiàn)找兩個(gè)數(shù)中較大值
returnaba:b;
九、逗號(hào)表達(dá)式
exp1,exp2,exp3,expn
逗號(hào)表達(dá)式,就是用逗號(hào)隔開(kāi)的多個(gè)表達(dá)式。
逗號(hào)表達(dá)式,從左向右依次執(zhí)行。整個(gè)表達(dá)式的結(jié)果是最后一個(gè)表達(dá)式的結(jié)果。
//代碼1
inta=1;
intb=2;
intc=(ab,a=b+10,a,b=a+1);//逗號(hào)表達(dá)式
//c是多少?
//代碼2
if(a=b+1,c=a/2,d0)
//代碼3
a=get_val();
count_val(a);
while(a0){
//業(yè)務(wù)處理
a=get_val();
count_val(a);
//如果使用逗號(hào)表達(dá)式,改寫:
while(a=get_val(),count_val(a),a0){
//業(yè)務(wù)處理
提示
這里一定要計(jì)算前面的值,可能會(huì)對(duì)最后一個(gè)表達(dá)式進(jìn)行影響
十、下標(biāo)引用與函數(shù)調(diào)用和結(jié)構(gòu)成員
1.[]下標(biāo)引用操作符
操作數(shù):
一個(gè)數(shù)組名+一個(gè)索引值
intarr[10];//創(chuàng)建數(shù)組
arr[9]=10;//實(shí)用下標(biāo)引用操作符。
//[]的兩個(gè)操作數(shù)是arr和9。
//也可以這樣
[9]arr=10;
//但是不建議這樣,代碼看起來(lái)不直觀
2.()函數(shù)調(diào)用操作符
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年烏魯木齊縣三年級(jí)數(shù)學(xué)第一學(xué)期期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 行政法學(xué)職業(yè)道德探討及試題答案
- 護(hù)理與藥學(xué)領(lǐng)域新興趨勢(shì)的考題試題及答案
- 2025衛(wèi)生資格考試科普課程的試題及答案
- 行政法學(xué)理論研究問(wèn)答試題及答案
- 中西哲學(xué)思想的比較研究試題及答案
- 護(hù)理法律責(zé)任剖析試題及答案
- 2025年執(zhí)業(yè)藥師高頻試題及答案分析
- 匯編2025年主管護(hù)師考試試題及答案
- 2025年執(zhí)業(yè)醫(yī)師考試重要科目分析試題及答案
- 2025年黃山市祁門文化旅游發(fā)展集團(tuán)有限公司招聘5人筆試參考題庫(kù)附帶答案詳解
- 美容美發(fā)股東合同和合伙協(xié)議
- 2024年湖北省襄陽(yáng)縣事業(yè)單位公開(kāi)招聘醫(yī)療衛(wèi)生崗筆試題帶答案
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蝕工程施工及驗(yàn)收規(guī)范
- 2022年重慶中考數(shù)學(xué)試題及答案(A卷)
- 加油站操作員職業(yè)技能鑒定試習(xí)題庫(kù)(中級(jí)工版)
- 弱電智能化物業(yè)人員人員培訓(xùn)記錄
- 國(guó)家最新煤的發(fā)熱量測(cè)定方法
- 超星爾雅學(xué)習(xí)通《美的歷程美學(xué)導(dǎo)論》章節(jié)測(cè)試含答案
- 最新民間非盈利組織財(cái)務(wù)報(bào)表(資產(chǎn)負(fù)債表)EXCEL版
- 危重病人床頭交接班記錄(樣本)
評(píng)論
0/150
提交評(píng)論