C語言全面細致精講操作符的使用_第1頁
C語言全面細致精講操作符的使用_第2頁
C語言全面細致精講操作符的使用_第3頁
C語言全面細致精講操作符的使用_第4頁
C語言全面細致精講操作符的使用_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第C語言全面細致精講操作符的使用目錄前言一、算術操作符二、移位操作符1.左移操作符2.右移操作符三、位操作符四、賦值操作符復合賦值符五、單目操作符單目操作符介紹1.sizeof和數(shù)組2.++和運算符六、關系操作符七、邏輯操作符八、條件操作符九、逗號表達式十、下標引用與函數(shù)調(diào)用和結構成員1.[]下標引用操作符2.()函數(shù)調(diào)用操作符3.訪問一個結構的成員

前言

本次文章我們要講各種操作符的介紹,內(nèi)容非常詳細,大家拭目以待哦!

首先介紹操作符的種類

操作符分類:

算術操作符移位操作符位操作符賦值操作符單目操作符關系操作符邏輯操作符條件操作符逗號表達式下標引用、函數(shù)調(diào)用和結構成員

一、算術操作符

+-*/%

除了%操作符之外,其他的幾個操作符可以作用于整數(shù)和浮點數(shù)。對于/操作符如果兩個操作數(shù)都為整數(shù),執(zhí)行整數(shù)除法。而只要有浮點數(shù)執(zhí)行的就是浮點數(shù)除法。%操作符的兩個操作數(shù)必須為整數(shù)。返回的是整除之后的余數(shù)。

二、移位操作符

左移操作符

右移操作符

注:移位操作符的操作數(shù)只能是整數(shù)。

1.左移操作符

移位規(guī)則:左邊拋棄、右邊補0

//10下面是在二進制中那個的表示形式

//0000000000000000000000000000000000001010

//左移一位

//0000000000000000000000000000000000010100

2.右移操作符

移位規(guī)則:

首先右移運算分兩種:

1.邏輯移位

左邊用0填充,右邊丟棄

2.算術移位

左邊用原該值的符號位填充,右邊丟棄

//我們假設用-1來舉例子

//-1在二進制中表示為32個1

//11111111111111111111111111111111

//邏輯右移

//01111111111111111111111111111111

//算術右移

//11111111111111111111111111111111

警告:

對于移位運算符,不要移動負數(shù)位,這個是標準未定義的。

例如:

intnum=10;

num-1;//error

三、位操作符

位操作符有:

//按位與

|//按位或

^//按位異或

注:他們的操作數(shù)必須是整數(shù)。

練習一下:

intmain(){

//按(2進制)位與

//|按(2進制)位或

//^按(2進制)位異或

inta=3;

intb=-5;

intc=a

//000000000000000000000000000000113的補碼

//10000000000000000000000000000101-5原碼

//11111111111111111111111111111010反碼

//11111111111111111111111111111011補碼

//000000000000000000000000000000113的補碼

//00000000000000000000000000000011//按位與全1為1其他位0

printf("%d\n",c);

intd=a|b;

//11111111111111111111111111111011補碼

//000000000000000000000000000000113的補碼

//11111111111111111111111111111011補碼

//10000000000000000000000000000100

//10000000000000000000000000000101

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

inte=a^b;

//11111111111111111111111111111011補碼

//000000000000000000000000000000113的補碼

//11111111111111111111111111111000

//10000000000000000000000000000111

//10000000000000000000000000001000

printf("%d\n",e);

return0;

}

一道變態(tài)的面試題:

不能創(chuàng)建臨時變量(第三個變量),實現(xiàn)兩個數(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;

練習:

編寫代碼實現(xiàn):求一個整數(shù)存儲在內(nèi)存中的二進制中1的個數(shù)。

intmain(){

intm=15;

inti=0;

intcount=0;

while(i32)

if(((mi)1)==1)

count++;

i++;

printf("count:%d\n",count);

return0;

分別用每一位與1

這一位是1運算后的結果就是1

四、賦值操作符

賦值操作符是一個很棒的操作符,他可以讓你得到一個你之前不滿意的值。也就是你可以給自己重新賦值

intweight=120;//體重

weight=89;//不滿意就賦值

doublesalary=10000.0;

salary=20000.0;//使用賦值操作符賦值。

賦值操作符可以連續(xù)使用,比如:

inta=10;

intx=0;

inty=20;a=x=y+1;//連續(xù)賦值

這樣的代碼感覺怎么樣?

那同樣的語義,你看看:

x=y+1;a=x;

這樣的寫法是不是更加清晰爽朗而且易于調(diào)試。

復合賦值符

+=

-=

*=

/=

%=

=

=

=

|=

^=

這些運算符都可以寫成復合的效果。

比如:

intx=10;x=x+10;x+=10;//復合賦值

//其他運算符一樣的道理。這樣寫更加簡潔。

五、單目操作符

單目操作符介紹

!邏輯反操作

-負值

+正值

取地址

sizeof操作數(shù)的類型長度(以字節(jié)為單位)

~對一個數(shù)的二進制按位取反

--前置、后置--

++前置、后置++

*間接訪問操作符(解引用操作符)(類型)強制類型轉換

演示代碼:

#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);//這樣寫行不行?//結果是不行

//其實我們從這里就可以看出sizeof不是一個函數(shù)

return0;

}

關于sizeof其實我們之前已經(jīng)見過了,可以求變量(類型)所占空間的大小。

1.sizeof和數(shù)組

#includestdio.h

voidtest1(intarr[])

printf("%d\n",sizeof(arr));//(2)//這里是指針,因為傳過來的是地址要拿指針接收在32為機器下字節(jié)為4

voidtest2(charch[])

printf("%d\n",sizeof(ch));//(4)//同理//這里是指針,因為傳過來的是地址要拿指針接收在32為機器下字節(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;

}

問:

(1)、(2)兩個地方分別輸出多少?

(3)、(4)兩個地方分別輸出多少?

2.++和運算符

//前置++和--

#includestdio.h

intmain()

inta=10;

intx=++a;

//先對a進行自增,然后對使用a,也就是表達式的值是a自增之后的值。x為11。

inty=--a;

//先對a進行自減,然后對使用a,也就是表達式的值是a自減之后的值。y為10;

return0;

}

//后置++和--

#includestdio.h

intmain()

inta=10;

intx=a++;

//先對a先使用,再增加,這樣x的值是10;之后a變成11;

inty=a--;

//先對a先使用,再自減,這樣y的值是11;之后a變成10;

return0;}

六、關系操作符

關系操作符

=

=

!=用于測試不相等

==用于測試相等

這些關系運算符比較簡單,沒什么可講的,但是我們要注意一些運算符使用時候的陷阱。

警告:

在編程的過程中==和=不小心寫錯,導致的錯誤。

七、邏輯操作符

邏輯操作符有哪些:

邏輯與

||邏輯或

區(qū)分邏輯與和按位與

區(qū)分邏輯或和按位或

12-----0

12----1

1|2-----3

1||2----1

接下來我們引入一道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;}

//程序輸出的結果是什么?

這里邏輯且運算碰到錯誤直接結束,后面的運算就不再繼續(xù)

而邏輯或運算碰到正確直接結束,后面的運算就不再繼續(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;

//程序輸出的結果是什么?

八、條件操作符

exp1exp2:exp3

練習:

1.

if(a5)

b=3;

else

b=-3;

轉換成條件表達式,是什么樣?

2.使用條件表達式實現(xiàn)找兩個數(shù)中較大值

returnaba:b;

九、逗號表達式

exp1,exp2,exp3,expn

逗號表達式,就是用逗號隔開的多個表達式。

逗號表達式,從左向右依次執(zhí)行。整個表達式的結果是最后一個表達式的結果。

//代碼1

inta=1;

intb=2;

intc=(ab,a=b+10,a,b=a+1);//逗號表達式

//c是多少?

//代碼2

if(a=b+1,c=a/2,d0)

//代碼3

a=get_val();

count_val(a);

while(a0){

//業(yè)務處理

a=get_val();

count_val(a);

//如果使用逗號表達式,改寫:

while(a=get_val(),count_val(a),a0){

//業(yè)務處理

提示

這里一定要計算前面的值,可能會對最后一個表達式進行影響

十、下標引用與函數(shù)調(diào)用和結構成員

1.[]下標引用操作符

操作數(shù):

一個數(shù)組名+一個索引值

intarr[10];//創(chuàng)建數(shù)組

arr[9]=10;//實用下標引用操作符。

//[]的兩個操作數(shù)是arr和9。

//也可以這樣

[9]arr=10;

//但是不建議這樣,代碼看起來不直觀

2.()函數(shù)調(diào)用操作符

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論