c語言之邏輯運算子

2021-09-25 18:41:00 字數 4830 閱讀 4571

老分不清乙個&號和倆的用法,今天專門拿出來整理整理:

一、邏輯運算子:

包括:1。&&邏輯與 2。||邏輯或 3。!邏輯非

邏輯運算子用於對包含關係運算子的表示式進行合併或取非

對於使用邏輯運算子的表示式,返回0表示「假」,返回1表示「真」。關於邏輯運算子的解釋

請注意:任何使用兩個字元做符號的運算子,兩字元之間不應有空格,即將==寫成= =是錯誤的。

假設乙個程式在同時滿足條件a<10和b==7時,必須執行某些操作。應使用關係運算子和邏輯運算子「與」來寫這個

條件的**。用&&表示「與」運算子,該條件**如下:

(a<10) && (b==7);

類似地,「或」是用於檢查兩個條件中是否有乙個為真的運算子。它由兩個連續的管道符號(||)表示。如果上例

改為:如果任一語句為真,則程式需執行某些操作,則條件**如下:

(a<10) || (b==7);

第三個邏輯運算子「非」用乙個感嘆號(!)表示。這個運算子對表示式的真值取反。例如,如果變數s小於10,程式

程式需執行某些操作,則條件**如下:

(s<10)

或(!(s>=10)) //s不大於等於10

關係運算子和邏輯運算子的優先順序一般都低於算術運算子。例如,5>4+3的計算與5>(4+3)運算子是一樣的,即

先計算4+3,再執行關係運算。此表達示的結果為「假」,即,將返回0。

下面的語句

printf("%d",5>4+3);

將輸出 0

可以總結為:&&的結果是真真為真。||的結果是假假為假。

二、位運算子:

包括:1。&位與符 2。|位或符 3。^位異或符 4。~位取反符

以運算元12為例。位運算子將數字12視為1100。位運算子將運算元視為位而不是數值。數值

可以是任意進製的:十進位制、八進位制或十六進製制。位運算子則將運算元轉化為二進位制,並相應地返回1或0。

位運算子將數字視為二進位制值,並按位進行相應運算,運算完成後再重新轉換為數字。例如:

表示式10&15表示(1010 & 1111),它將返回表示1010的值10。因為真真得真,或者是11得1,同位全是1結果也是1

表示式10|15表示(1010 | 1111),它將返回表示1111的值15。假假得假。全零得零。

表示式10^15表示(1010 ^ 1111), 它將返回表示0101的值5。此時是同性相斥,相同的就為假。

表示式~10表示(~1010),它將返回表示0101的值 -11。此號好理解,按位取反

c語言運算子

百科名片

運算子是告訴編譯程式執行特定算術或邏輯操作的符號。c語言的運算範圍很寬,把除了控制語句和輸入輸出以外的幾乎所有的基本操作都作為運算子處理。主要分為三大類:算術運算子、 關係運算子與邏輯運算子、按位運算子。除此之外,還有一些用於完成特殊任務的運算子。

目錄c語言運算子分類

運算子優先順序與結合性

運算子優先順序等級口訣及注釋運算子優先順序等級口訣

運算子優先順序等級注釋

運算子應用舉例c語言運算子分類 

運算子優先順序與結合性 

運算子優先順序等級口訣及注釋 運算子優先順序等級口訣 

運算子優先順序等級注釋

運算子應用舉例

展開 編輯本段c語言運算子分類

1級(左結合)   () 圓括號;下標運算子;->指向結構體成員運算子;. 結構體成員運算子。   2級(右結合)   !邏輯非運算子;~按位取反運算子;++字首增量運算子;--字首減量運算子;+正號運算子;-負號運算子;(型別)型別轉換運算子;*指標運算子;&位址運算子;sizeof長度運算子。   3級(左結合)   *乘法運算子;/除法運算子;%取餘運算子。   4級(左結合)   +加法運算子;-減法運算子。      5級(左結合)   《左移運算子;>>右移運算子。   6級(左結合)   <、<=、>、>=關係運算子。   7級(左結合)   ==等於運算子;!=不等於運算子。   8級(左結合)   &按位與運算子。   9級(左結合)   ^按位異或運算子。   10級(左結合)   |按位或運算子。   11級(左結合)   &&邏輯與運算子。   12級(左結合)   ||邏輯或運算子。   13級(右結合)   ? :條件運算子。   14級(右結合)   =、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=賦值運算子。   15級(左結合)   ,逗號運算子。

編輯本段運算子優先順序與結合性

運算子的優先順序:c語言中,運算子的運算優先順序共分為15 級。1 級最高,15 級最低。 在表示式中,優先順序較高的先於優先順序較低的進行運算。而在乙個運算量兩側的運算子 優先順序相同時,則按運算子的結合性所規定的結合方向處理。   運算子的結合性:c語言中各運算子的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算子的結合性是自左至右,即先左後右。如有表示式x-y+z 則y 應先與「-」號結合,執行x-y 運算,然後再執行+z 的運算。這種自左至右的結合 方向就稱為「左結合性」。而自右至左的結合方向稱為「右結合性」。最典型的右結合 性運算子是賦值運算子。如x=y=z,由於「=」的右結合性,應先執行y=z 再執行x=(y=z)   運算。c語言運算子中有不少為右結合性,應注意區別,以避免理解錯誤。   優先順序從上到下依次遞減,最上面具有最高的優先順序,逗號操作符具有最低的優先順序。   所有的優先順序中,只有三個優先順序是從右至左結合的,它們是單目運算子、條件運算子、賦值運算子。其它的都是從左至右結合。   具有最高優先順序的其實並不算是真正的運算子,它們算是一類特殊的操作。()是與函式相關,與陣列相關,而->及.是取結構成員。   其次是單目運算子,所有的單目運算子具有相同的優先順序,因此在我認為的 真正的運算子中它們具有最高的優先順序,又由於它們都是從右至左結合的,因此*p++與*(p++)等效是毫無疑問的。   另外在c語言裡,沒有前置後置之分,因為++ -- 是右結合所以右側優先運算,表現為 "運算元後置優先順序比較高" 的假象,前置和後置的區分是因為運算子過載而後加入c++的   接下來是算術運算子,*、/、%的優先順序當然比+、-高了。   移位運算子緊隨其後。   其次的關係運算子中,< <= > >=要比 == !=高乙個級別,不大好理解。   所有的邏輯操作符都具有不同的優先順序(單目運算子除外,!和~)   邏輯位操作符的"與"比"或"高,而"異或"則在它們之間。   跟在其後的&&比||高。   接下來的是條件運算子,賦值運算子及逗號運算子。   在c語言中,只有4個運算子規定了運算方向,它們是&&、| |、條件運算子及賦值運算子。   &&、| |都是先計算左邊表示式的值,當左邊表示式的值能確定整個表示式的值時,就不再計算右邊表示式的值。如 a = 0 && b; &&運算子的左邊位0,則右邊表示式b就不再判斷。   在條件運算子中。如a?b:c;先判斷a的值,再根據a的值對b或c之中的乙個進行求值。   賦值表示式則規定先對右邊的表示式求值,因此使 a = b = c = 6;成為可能。

編輯本段運算子優先順序等級口訣及注釋

運算子優先順序等級口訣

圓方括號、箭頭一句號, 自增自減非反負、針強位址長度,   乘除,加減,再移位,   小等大等、等等不等,   八位與,七位異,六位或,五與,四或,三疑,二賦,一真逗。   其中「,」號為乙個等級分段。

運算子優先順序等級注釋

「圓方括號、箭頭一句號」指的是第15級的運算子。其中圓方括號很明顯「()、」,箭頭 指的是指向結構體成員運算子「->」,句號 指的是結構體成員運算子「.」 ;   「自增自減非反負、針強位址長度」指的是第14級的運算子。其中 非 指的是邏輯運算子「!」,反 指的是按位取反運算子「~」,負 指的是負號運算子「-」,針 指的是指標運算子「*」,強 指的是強制型別轉換運算子,位址 指的是位址運算子「&」,長度 指的是長度運算子「sizeof 」;   「乘除,加減,再移位」移位指的是左移運算子「<<」和右移運算子「>>」,其中除法還包括了 取餘運算子「%」;   「小等大等、等等不等」 指的是第10級到第9級的運算子:<、<=、>和》=,等等指的是等於運算子==,不等指的是不等於運算子!=   「八位與,七位異,六位或」其中 八位與 指的是第8級的 按位與 運算子「&」,七位異 指的是第7級的按位異或 運算子「^」,六位或 指的是第6級的按位或運算子「||」;   「五與,四或」指的是第5級、第4級的邏輯與運算子「&&」和邏輯或運算子「||」;   「三疑,二賦,一真逗」指的是第3級到第1級的運算子。其中,三疑指的是條件運算子「?:」 (三有雙重含義:即指優先級別是三,它的運算子型別也是三目,疑也取「?」之意),二賦 指的是賦值運算子=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ,一真逗 指的是第1級的「,」運算子,真字只是為了語句需要罷了。   由於c語言的運算子優先順序與c++的不完全一樣(主要是增加了幾個運算子),所以這個口訣不能完全實用於c++.但是應該能夠相容,大家可以比較一下他們的區別應該就能夠很快掌握c++的優先順序的!

編輯本段運算子應用舉例

·賦值運算子:a=5; a=b=0;   第乙個賦值語句把5賦給變數a;第二個賦值語句的意思是把0同時賦值給兩個變數。這是因為賦值語句是從右向左運算的,也就是說從右端開始計算,先b=0,然後a=b。   ·復合賦值運算子:a=1;a+=3;   上面第二個賦值語句等價於a=a+3;即a=4。   ·算術運算子:area=height*width;num=num1+num2/num3-num4;   第乙個賦值語句height和width相乘結果賦給變數area;第二個賦值語句先完成num2與num3的整除運算,然後與num1相加,再減去num4,結果賦給num。運算子運算順序先算乘除再算加減。單目正和單目負最先運算。   ·邏輯運算子:a=1,b=1; a||b-1;   因為a=1為真值,所以不管b-1是不是真值,總的表示式一定為真值,這時後面的表示式就不會再計算了。   ·關係運算子:if(a>0)...   如果a>0,則執行if語句中的內容,否則退出。   ·條件運算子:a=(b>0)?b:-b;   當b>0時,a=b;當b不大於0時,a=-b;其實上面的意思就是把b的絕對值賦值給a。   ·逗號運算子:b=2,c=7,d=5;a=(++b,c--,d+3);   有三個表示式,用逗號分開,所以最終的值應該是最後乙個表示式的值,也就是d+3=8,所以a=8。  

C語言之邏輯運算子 和

前言 伍 最近在刷劍指offer的面試題21的時候給 邏輯運算子坑的慘慘滴,足足浪費了我好些時間,耽誤了我西行的腳步 所以今天索性在此做乙個小總結給自己警醒一哈 1 和 2 這兩個邏輯運算子應該是做開發以來最常用的兩個運算子了,平常使用那是順手拈來,怎麼會有坑給人掉呢?可能也只能怪伍 水平不夠了,咱...

C語言 邏輯運算子

邏輯運算子 含義 與ll 或!非邏輯表示式表示式的求值順序是從左往右。一旦發現有使整個表示式為假的因素,立即停止求值。c提供條件表示式作為表達if else語句的一種便捷方式,該表示式使用?條件運算子。分為兩部分,需要3個運算物件。三元運算子 條件表示式的通用形式為 expression1 expr...

C語言 邏輯運算子

邏輯與運算子 邏輯或運算子 邏輯非運算子 運算的結果只有2個,真 為1,假 為0 邏輯與運算子 1.使用格式 條件a 條件b 2.運算結果 只有當條件a與條件b,為真的時候,它的結果才為1,也就是真 其餘情況下結果都為0,也就是假,所以,條件a或條件b只要有乙個不成立,結果都為0,也就是假 邏輯與的...