C語言運算符大全_第1頁
C語言運算符大全_第2頁
C語言運算符大全_第3頁
C語言運算符大全_第4頁
C語言運算符大全_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、【精品文檔】如有侵權,請聯系網站刪除,僅供學習與交流C語言運算符大全.精品文檔.C語言運算符大全C語言的內部運算符很豐富,運算符是告訴編譯程序執行特定算術或邏輯操作的符號。C語言有三大運算符:算術、關系與邏輯、位操作。另外,C還有一些特殊的運算符,用于完成一些特殊的任務。2.6.1算術運算符表2-5列出了C語言中允許的算術運算符。在C語言中,運算符“+”、“”、“*”和“/”的用法與大多數計算機語言的相同,幾乎可用于所有C語言內定義的數據類型。當“/”被用于整數或字符時,結果取整。例如,在整數除法中,10/3=3。一元減法的實際效果等于用-1乘單個操作數,即任何數值前放置減號將改變其符號。模運

2、算符“%”在C語言中也同它在其它語言中的用法相同。切記,模運算取整數除法的余數,所以“%”不能用于float和double類型。 最后一行打印一個0和一個1,因為1/2整除時為0,余數為1,故1%2取余數1。2.6.2自增和自減C語言中有兩個很有用的運算符,通常在其它計算機語言中是找不到它們的自增和自減運算符,+和-。運算符“+”是操作數加1,而“-”是操作數減1,換句話說:x=x+1;同+x;x=x-1;同-x;自增和自減運算符可用在操作數之前,也可放在其后,例如:x=x+1;可寫成+x;或x+;但在表達式中這兩種用法是有區別的。自增或自減運算符在操作數之前,C語言在引用操作數之前就先執行加

3、1或減1操作;運算符在操作數之后,C語言就先引用操作數的值,而后再進行加1或減1操作。請看下例:x=10;y=+x;此時,y=11。如果程序改為:x=10;y=x+;則y=10。在這兩種情況下,x都被置為11,但區別在于設置的時刻,這種對自增和自減發生時刻的控制是非常有用的。在大多數C編譯程序中,為自增和自減操作生成的程序代碼比等價的賦值語句生成的代碼要快得多,所以盡可能采用加1或減1運算符是一種好的選擇。下面是算術運算符的優先級:最高+、-(一元減)*、/、%最低+、-編譯程序對同級運算符按從左到右的順序進行計算。當然,括號可改變計算順序。C語言處理括號的方法與幾乎所有的計算機語言相同:強迫

4、某個運算或某組運算的優先級升高。2.6.3關系和邏輯運算符關系運算符中的“關系”二字指的是一個值與另一個值之間的關系,邏輯運算符中的“邏輯”二字指的是連接關系的方式。因為關系和邏輯運算符常在一起使用,所以將它們放在一起討論。關系和邏輯運算符概念中的關鍵是True(真)和Flase(假)。C語言中,非0為True,0為Flase。使用關系或邏輯運算符的表達式對Flase和Ture分別返回值0或1(見表2-6)。 表2-6給出于關系和邏輯運算符,下面用1和0給出邏輯真值表。關系和邏輯運算符的優先級比算術運算符低,即像表達式10>1+12的計算可以假定是對表達式10>(1+12)的計算,

5、當然,該表達式的結果為Flase。在一個表達式中允許運算的組合。例如:10>5&&!(10<9)|3<=4這一表達式的結果為True。下表給出了關系和邏輯運算符的相對優先級:最高!>= <= !=&&最低|同算術表達式一樣,在關系或邏輯表達式中也使用括號來修改原計算順序。切記,所有關系和邏輯表達式產生的結果不是0就是1,所以下面的程序段不僅正確而且將在屏幕上打印數值1。int x;x=100;printf("%d",x>10);2.6.4位操作符與其它語言不同,C語言支持全部的位操作符(BitwiseOpe

6、rators)。因為C語言的設計目的是取代匯編語言,所以它必須支持匯編語言所具有的運算能力。位操作是對字節或字中的位(bit)進行測試、置位或移位處理,這里字節或字是針對C標準中的char和int數據類型而言的。位操作不能用于float、double、longdouble、void或其它復雜類型。表2-7給出了位操作的操作符。位操作中的AND、OR和NOT(1的補碼)的真值表與邏輯運算等價,唯一不同的是位操作是逐位進行運算的。如表2-8所示,當且僅當一個操作數為True時,異或的輸出為True,否則為Flase。位操作通常用于設備驅動程序,例如調制解調器程序、磁盤文件管理程序和打印機驅動程序。

7、這是因為位操作可屏蔽掉某些位,如奇偶校驗位(奇偶校驗位用于確保字節中的其它位不會發生錯誤通常奇偶校驗位是字節的最高位)。通常我們可把位操作AND作為關閉位的手段,這就是說兩個操作數中任一為0的位,其結果中對應位置為0。例如,下面的函數通過調用函數read_modem(),從調制解調器端口讀入一個字符,并將奇偶校驗位置成0。字節的位8是奇偶位,將該字節與一個位1到位7為1、位8為0的字節進行與操作,可將該字節的奇偶校驗位置成0。表達式ch&127正是將ch中每一位同127數字的對應位進行與操作,結果ch的位8被置成了0。在下面的例子中,假定ch接收到字符"A"并且奇偶

8、位已經被置位。一般來說,位的AND、OR和XOR操作通過對操作數運算,直接對結果變量的每一位分別處理。正是因為這一原因(還有其它一些原因),位操作通常不像關系和邏輯運算符那樣用在條件語句中,我們可以用例子說明這一點:假定X=7,那么x&&8為Ture(1),而x&8卻為Flase(0)。記住,關系和邏輯操作符結果不是0就是1。而相似的位操作通過相應處理,結果可為任意值。換言之,位操作可以有0或1以外的其它值,而邏輯運算符的計算結果總是0或1。移位操作符>>和<<將變量的各位按要求向或向左移動。右移語句通常形式是:variable>>右

9、移位數左移語句是:variable<<左移位數當某位從一端移出時,另一端移入0(某些計算機是送1,詳細內容請查閱相應C編譯程序用戶手冊)。切記:移位不同于循環,從一端移出的位并不送回到另一端去,移去的位永遠丟失了,同時在另一端補0。移位操作可對外部設備(如D/A轉換器)的輸入和狀態信息進行譯碼,移位操作還可用于整數的快速乘除運算。如表2-9所示(假定移位時補0),左移一位等效于乘2,而右移一位等效于除以2。每左移一位乘2,注意x<<2后,原x的信息已經丟失了,因為一位已經從一端出,每右移一位相當于被2除,注意,乘后再除時,除操作并不帶回乘法時已經丟掉的高位。反碼操作符為

10、。的作用是將特定變量的各位狀態取反,即將所有的1位置成0,所有的0位置成1。位操作符經常用在加密程序中,例如,若想生成一個不可讀磁盤文件時,可以在文件上做一些位操作。最簡單的方法是用下述方法,通過1的反碼運算,將每個字節的每一位取反。原字節 00101100第一次取反碼 11010011第二次取反碼 00101100注意,對同一行進行連續的兩次求反,總是得到原來的數字,所以第一次求反表示了字節的編碼,第二次求反進行譯碼又得到了原來的值。可以用下面的函數encode()對字符進行編碼。2.6.5 ?操作符C語言提供了一個可以代替某些if-then-else語句的簡便易用的操作符?。該操作符是三元

11、的,其一般形式為:EXP1?EXE2:EXP33EXP1,EXP2和EXP3是表達式,注意冒號的用法和位置。操作符“?”作用是這樣的,在計算EXP1之后,如果數值為True,則計算EXP2,并將結果作為整個表達式的數值;如果EXP1的值為Flase,則計算EXP3,并以它的結果作為整個表達式的值,請看下例:x=10;y=x>9?100:200;例中,賦給y的數值是100,如果x被賦給比9小的值,y的值將為200,若用if-else語句改寫,有下面的等價程序:x=10;if(x>9)y=100;elsey=200;有關C語言中的其它條件語句將在第3章進行討論。2.6.6 逗號操作符作

12、為一個操作符,逗號把幾個表達式串在一起。逗號操作符的左側總是作為void(無值),這意味著其右邊表達式的值變為以逗號分開的整個表達式的值。例如:x=(y=3,y+1);這行將3賦給y,然后將4賦給x,因為逗號操作符的優先級比賦值操作符優先級低,所以必須使用括號。實際上,逗號表示操作順序。當它在賦值語句右邊使用時,所賦的值是逗號分隔開的表中最后那個表達式的值。例如,y=10;x=(y=y-5,25/y);執行后,x的值是5,因為y的起始值是10,減去5之后結果再除以25,得到最終結果。在某種意義上可以認為,逗號操作符和標準英語的and是同義詞。2.6.7關于優先級的小結表2-10列出了C語言所有

13、操作符的優先級,其中包括將在本書后面討論的某些操作符。注意,所有操作符(除一元操作符和?之外)都是左結合的。一元操作符(*,&和-)及操作符“?”則為右結合。C語言運算符大全C語言共有34個運算符,今天閑來沒事就找了一下,現在拿出來分享一下呵:按優先級排序,空行表示優先級下降,01為最高,最先算 1431均為雙目,左結合 () 01圓括號 02下標 -> 03指針型結構成員 . 04結構成員 ! 05邏輯非 06位非 + 07自增 - 08自減 - 09取負 (類型) 10類型轉換 * 11取內容 & 12取地址 sizeof 13求字節 此級(513)均為單目運算,且都

14、為右結合 * 14乘 / 15除 % 16求余 + 17加 - 18減 << 19左移 >> 20右移 < 21小于 <= 22小于等于 > 23大于 >= 24大于等于 = 25等于 != 26不等于 & 27位與 28位異或 | 29位或 && 30與 | 31或 ?: 32條件運算 此級(32)為三目運算,右結合 = 33賦值運算 另有10個擴展符+=,-=,*=,/=,%=,>>=,<<=,&=,=,|= , 34逗號運算運算符解釋結合方式() -> .括號(函數等),數組,兩

15、種結構成員訪問由左向右! + - + -  * & (類型) sizeof否定,按位否定,增量,減量,正負號, 間接,取地址,類型轉換,求大小由右向左* / %乘,除,取模由左向右+ -加,減由左向右<< >>左移,右移由左向右< <= >= >小于,小于等于,大于等于,大于由左向右= !=等于,不等于由左向右&按位與由左向右按位異或由左向右|按位或由左向右&&邏輯與由左向右|邏輯或由左向右? :條件由右向左= += -= *= /=  &= = |= <<= >>

16、;=各種賦值由右向左,逗號(順序)由左向右上面給出的是其運算符,下面給出32個關鍵字及其含義:auto :聲明自動變量 一般不使用 double :聲明雙精度變量或函數 int: 聲明整型變量或函數 struct:聲明結構體變量或函數 break:跳出當前循環 else :條件語句否定分支(與 if 連用) long :聲明長整型變量或函數     switch :用于開關語句  case:開關語句分支   enum :聲明枚舉類型    register:聲明積存器變量  

17、typedef:用以給數據類型取別名(當然還有其他作用) char :聲明字符型變量或函數 extern:聲明變量是在其他文件正聲明(也可以看做是引用變量)   return :子程序返回語句(可以帶參數,也看不帶參數)   union:聲明聯合數據類型   const :聲明只讀變量   float:聲明浮點型變量或函數 short :聲明短整型變量或函數 unsigned:聲明無符號類型變量或函數 continue:結束當前循環,開始下一輪循環  for:一種循環語句(可意會不可言傳)

18、60;      signed:生命有符號類型變量或函數   void :聲明函數無返回值或無參數,聲明無類型指針(基本上就這三個作用) default:開關語句中的“其他”分支  goto:無條件跳轉語句     sizeof:計算數據類型長度   volatile:說明變量在程序執行中可被隱含地改變  do :循環語句的循環體 while :循環語句的循環條件 static :聲明靜態變量 if:條件語句C語言運算符分類1級優先級(左結合)

19、() 圓括號;下標運算符;->指向結構體成員運算符;. 結構體成員運算符。 2級優先級(右結合) !邏輯非運算符;按位取反運算符;+前綴增量運算符;-前綴減量運算符;+正號運算符;-負號運算符;(類型)類型轉換運算符;*指針運算符;&地址運算符;sizeof長度運算符。 3級優先級(左結合) *乘法運算符;/除法運算符;%取余運算符。 4級優先級(左結合) +加法運算符;-減法運算符。 5級優先級(左結合) <<左移運算符;>>右移運算符。 6級優先級(左結合) <、<=、>、>=關系運算符。 7級優先級(左結合) =等于運算符;!

20、=不等于運算符。 8級優先級(左結合) &按位與運算符。 9級優先級(左結合) 按位異或運算符。 10級優先級(左結合) |按位或運算符。 11級優先級(左結合) &&邏輯與運算符。 12級優先級(左結合) |邏輯或運算符。 13級優先級(右結合) ? :條件運算符。 14級優先級(右結合) =、 +=、 -=、 *=、 /=、 %=、 &=、 =、 |=、 <<=、 >>=賦值運算符。 15級優先級(左結合) ,逗號運算符。 運算符優先級優先級從上到下依次遞減,最上面具有最高的優先級,逗號操作符具有最低的優先級。 所有的優先級中,只有三

21、個優先級是從右至左結合的,它們是單目運算符、條件運算符、賦值運算符。其它的都是從左至右結合。 具有最高優先級的其實并不算是真正的運算符,它們算是一類特殊的操作。()是與函數相關,與數組相關,而>及.是取結構成員。 其次是單目運算符,所有的單目運算符具有相同的優先級,因此在我認為的 真正的運算符中它們具有最高的優先級,又由于它們都是從右至左結合的,因此*p+與*(p+)等效是毫無疑問的。 另外在C語言里 沒有前置后置之分 因為+ - 是右結合所以 右側優先運算 表現為 "操作數后置優先級比較高" 的假象 前置和后置的區分是因為運算符重載而后加入C+的 接下來是算術運算符

22、,*、/、%的優先級當然比+、高了。 移位運算符緊隨其后。 其次的關系運算符中,< <= > >=要比 = !=高一個級別,不大好理解。 所有的邏輯操作符都具有不同的優先級(單目運算符出外,!和) 邏輯位操作符的"與"比"或"高,而"異或"則在它們之間。 跟在其后的&&比|高。 接下來的是條件運算符,賦值運算符及逗號運算符。 在C語言中,只有4個運算符規定了運算方向,它們是&&、| |、條件運算符及賦值運算符。 &&、| |都是先計算左邊表達式的值,當左邊表達式的

23、值能確定整個表達式的值時,就不再計算右邊表達式的值。如 a = 0 && b; &&運算符的左邊位0,則右邊表達式b就不再判斷。 在條件運算符中。如a?b:c;先判斷a的值,再根據a的值對b或c之中的一個進行求值。 賦值表達式則規定先對右邊的表達式求值,因此使 a = b = c = 6;成為可能。 運算符優先級等級口訣及注釋運算符優先級等級口訣圓方括號、箭頭一句號, 自增自減非反負、針強地址長度, 乘除,加減,再移位, 小等大等、等等不等, 八位與,七位異,六位或,五與,四或,三疑,二賦,一真逗。 其中“,”號為一個等級分段。 運算符優先級等級注釋“圓方括號、

24、箭頭一句號”指的是第15級的運算符。其中圓方括號很明顯“()、”,箭頭 指的是指向結構體成員運算符“->”,句號 指的是結構體成員運算符“.” ; “自增自減非反負、針強地址長度”指的是第14級的運算符。其中 非 指的是邏輯運算符“!”,反 指的是按位取反運算符“”,負 指的是負號運算符“”,針 指的是指針運算符“*”,強 指的是強制類型轉換運算符,地址 指的是地址運算符“&”,長度 指的是長度運算符“sizeof ”; “乘除,加減,再移位”移位指的是左移運算符“<<”和右移運算符“>>”,其中除法還包括了 取余運算符“%”; “小等大等、等等不等” 指的是第10級到第9級的運算符:<、<=、>和>=,等等指的是等于運算符=,不等指的是不等于運算符!= “八位與,七位異,六位或”其中 八位與 指的是第8級的 按位與 運算符“&”,七位異 指的是第7級的按位異或 運算符“”,六位或 指的是第6級的按位或運算符“|”; “五與,四或”指的是第5級、第4級的邏輯與運算符“&&”和邏輯或運算符“|”; “三疑,二賦,一真逗”指的是第3級到第1級的運算符。其中,三疑指的是條件運算符“?:” (三有雙重含義:即指優

溫馨提示

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

評論

0/150

提交評論