C語言中各種運算類型全面總結_第1頁
C語言中各種運算類型全面總結_第2頁
C語言中各種運算類型全面總結_第3頁
C語言中各種運算類型全面總結_第4頁
C語言中各種運算類型全面總結_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第C語言中各種運算類型全面總結目錄一、概述二、四則運算三、關系運算四、邏輯運算與位運算五、深度剖析位運算

一、概述

C語言中支持下面4種類型的運算

運算類型運算符四則運算+,-,*,/,%關系運算,,=,=,==,!=邏輯運算,||,!位運算,|,^,,,~

二、四則運算

(+,-,*,/,%)

就是數(shù)學中的加,減,乘,除等運算遵循先乘除后加減的運算優(yōu)先級可以使用括號改變運算順序

注意:

C語言中的除法運算,其除數(shù)不能為0

下面通過一段程序感受一下:

#includestdio.h

intmain()

inta=5;

intb=2;

doublec=3;

c=a/b;

printf("c=%f\n",c);

c=a%b;

printf("c=%f\n",c);

return0;

}

下面為輸出結果:

通過上面的代碼,可以得到一些小結論:

整型數(shù)的除法運算結果會舍棄小數(shù)部分取余(%)運算也是一種除法運算,結果為余數(shù)浮點數(shù)不能進行取余運算

三、關系運算

(,,=,=,==,!=)

比較兩個值大小關系或相等關系的運算比較的結果為邏輯值:真(1),假(0)可以使用括號()改變關系運算的順序

如上面的圖片所示,c的值就為0

下面通過一段代碼,感受一下:

#includestdio.h

intmain()

inta=1;

intb=2;

intc=3;

c=a!=b;

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

c=a-b=a+b;

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

c=(ab)+(c

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

return0;

}

下面為輸出結果:

小技巧:如果不同類型的運算同時出現(xiàn)在一個表達式中,那么盡量使用括號()指明運算順序。

運算優(yōu)先級(優(yōu)先級:四則運算關系運算賦值操作)

四則運算

正負號乘除運算加減運算

關系運算

大小比較運算相等比較運算

賦值操作

下面看一段代碼,深入感受一下運算優(yōu)先級:

#includestdio.h

intmain()

inta=1;

intb=2;

intc=0;

c=a!=b+a*b;

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

return0;

}

下面為輸出結果,可以看出,c的輸出結果為1,為什么為1呢?這是由于乘法優(yōu)先級大于加法優(yōu)先級大于關系運算優(yōu)先級,所以程序執(zhí)行過程是這樣,先計算a*b,然后將a*b的結果2加上b,得到4,最后再比較a!=4,得到的結果當然為1啦,我們還可以通過反匯編來觀察代碼的執(zhí)行過程。

c=a!=b+a*b的匯編代碼

所以如果想得到a!=b再加上a*b的結果,一定要記得加括號,如下:

#includestdio.h

intmain()

inta=1;

intb=2;

intc=0;

c=(a!=b)+(a*b);

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

return0;

}

這樣才能得到正確結果,如下所示:

小結:

整型數(shù)除法有兩種:取商(/),取余(%)浮點數(shù)除法與數(shù)學中除法運算相同,結果為浮點數(shù)不同運算的優(yōu)先級不同,可使用括號改變運算優(yōu)先級同一個表達式中應避免不同的運算類型(四則運算,關系運算)

四、邏輯運算與位運算

邏輯運算(,ll,!)

邏輯運算的參與者為邏輯值(真或假)任何非零值在邏輯運算中都為真任何零值在邏輯運算中都為假

運算左操作數(shù)右操作數(shù)結果000010100111

||運算左操作數(shù)右操作數(shù)結果000011101111

邏輯運算中的短路法則

對于運算

從左向右進行,如果有一個操作數(shù)為假,則整個表達式為假第一個為假的操作數(shù)之后的其它操作數(shù)不再計算

對于||運算

從左向右進行,如果有一個操作數(shù)為真,則整個表達式為真第一個為真的操作數(shù)之后的其它操作數(shù)不再計算

取非運算(!)

單目運算(只需要一個操作數(shù)),運算結果為邏輯值

對真值取非的結果為假對假值取非得結果為真

話不多說,上代碼:

#includestdio.h

intmain()

inta=1;

intb=2;

intc=0;

c=a

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

c=!(a-b)||(c

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

c=10000;

c=!!c;

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

return0;

}

下面為運行結果:

位運算(,|,~,^,,)

直接對數(shù)據(jù)的二進制位進行操作位運算的基本單位是二進制位,所以也是一種0和1的操作可以使用括號()改變位運算的運算順序位運算的操作數(shù)只能是整型數(shù)(浮點數(shù)不能直接進行位運算)

運算符含義示例優(yōu)先級~按位求反~0101-10101(高)左移:高位移出,低位補000111-01102右移:低位移出,高位補符號位01012-00012按位與01111100-01003^按位異或:相同為0,不同為10111^1100-10114|按位或0111|1100-11115(低)

注:

1.按位與和邏輯與的計算法相同:兩者為1,結果為1,否則為0

2.按位或和邏輯或的計算法相同:兩者為0,結果為0,否則為1

位運算實例

將整數(shù)5的第2個二進制位置1將整數(shù)7的第4個二進制位取反將整數(shù)2的最后兩位取反將整數(shù)15右移2位,再將第2個二進制位置0設變量a的二進制數(shù)是10101101,若想通過運算a^b使得a的中間4位取反,其余位不變,則b的值是多少

代碼如下:

#includestdio.h

intmain()

printf("c=%d\n",5|2);

printf("c=%d\n",7^8);

printf("c=%d\n",2^3);

printf("c=%d\n",(152)13);

printf("c=%d\n",173^60);

return0;

}

運行結果如下:

這里需要特別注意:對某一位或者某幾位取反可以用異或(^)運算,這在工程里常用?。?!

運算優(yōu)先級(優(yōu)先級從上到下為由高到低)

正負號邏輯非按位取反乘除加減按位左右移大小比較運算相等比較運算按位與按位異或按位或邏輯與邏輯或賦值操作

小結

邏輯運算中有特殊的短路法則,結果確定后不再向下計算C語言中的真值對應非零值,假值對應零值位運算直接對數(shù)據(jù)的二進制位進行操作位運算的操作數(shù)只能是整型數(shù)(浮點數(shù)不能直接進行位運算)

五、深度剖析位運算

不同類型的本質在于:

占用的內存大小不同,如:short占用2字節(jié),int占用4字節(jié)

表示具體數(shù)據(jù)的方式不同

正整數(shù)用原碼表示,負整數(shù)用補碼表示整數(shù)型和浮點型的二進制表示不同

位運算時需要明確的知道的事

操作數(shù)的類型(占用的內存大小)操作數(shù)是正數(shù)還是負數(shù)(符號位,數(shù)據(jù)表示)不同類型的操作數(shù)先自動對齊再進行位運算(補符號位)

如下面的一段代碼:

shorta=1;

intb=4;

intc=a|b;

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

b為int類型,占4個字節(jié),a為short類型,占2個字節(jié)。所以a要先要補符號位,由于a是正數(shù),所以補0,這樣就可以進行位運算了,得出c的結果為5。

下面來看一段代碼:

#includestdio.h

intmain()

shorta=1;

shortb=2;

intc=a-b;

c=c4;

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

c=c*-1*164;

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

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

return0;

}

下面為輸出結果:

小結論

正數(shù)符號位為0,右移運算時,高位補0,低位移除負數(shù)符號位為1,右移運算時,高位補1,低位移除左移運算時,最高位移除,低位補0最高位的具體位置,由數(shù)據(jù)類型決定

類型補充小知識

char字符型,一個字節(jié)的整型,范圍[-128,127]字符數(shù)據(jù)(單引號括起來的字符)的本質是整型數(shù)char類型的變量可以打印為整數(shù)或者字符

再看一段代碼:

#includestdio.h

intmain()

charc='A';

shorta=c;

intb=c;

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

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

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

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

c=0x40;

printf("c=%x\n",c);

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

c=c1;

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

c=

溫馨提示

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

評論

0/150

提交評論