1樓:匿名使用者
邏輯運算子有三種,分別為&&(與運算)||(或運算)!(非運算),三者的優先順序順序為!>&&>||。
ps.1、與運算子(&&)和或運算子(||)均為雙目運算子。具有左結合性。非運算子(!)為單目運算子,具有右結合性。
2、「&&」和「||」優先順序低於關係運算子,「!」優先順序高於算術運算子。
2樓:
a=b=c=1
++a++b
++c++b&&++c
++a||(++b&&++c)
3樓:匿名使用者
ls,貌似&&的優先順序比||大 = 賦值語句結合性 自右相左
a=b=c=1;等價於 c = 1;b = c; a = b;
-------------------------
看了sunnyapi的回答我感覺有必要
對以上回答進行一點補充
首先宣告 ||和&&運算子均屬於短路運算子;
什麼是短路運算子舉個簡單例子
若 a = 1; a||a++;執行後結果是什麼,變數a值為多少?
||邏輯或對第一項a進行判斷是否為0,若不為零則返回值為1;且不在進行後面的a++運算,這就是短路運算子的特性,這樣一來,a的值還是1沒有改變,同理 a =0; 0&&a++;的執行結果為a=0;
舉個形象點的例子:
a=1 a就是真
b=0 b就是假
a||a-- 真||a++,既然已經有真的了就沒必要再判斷a--是否為真 1||a++;肯定是真的;
同理 b&&b++ ,假&&b--既然已經有假的了就沒有必要判斷b++真假,同時b++也就不會被執行
++a||++b&&++c;這個語句根據算數運算子的優先順序關係 &&的優先順序比||大 『可以這樣理解』
所以先執行對++a||++b 和 ++c進行邏輯與(&&)運算,並先判斷++a||++b是否為假若假則不進行++c;在判斷 ++a||++b 是否為真的過程中,進行了++a和++b的||(邏輯或)運算,在邏輯或運算中先判斷++a是否為零,這個過程中相當於 先a=a+1;再if (a!=0) 因為前面a=1,再執行++a,a這時等於2所以在if (a!=0) 成立則,不會執行++b;
所以執行結果為a =2 ,b=c=1;
再程式執行++a||++b&&++c;這條語句的過程中只有a變數的值發生改變,而不是樓下說的那樣
「在執行「++a||++b&&++c;」語句之前完成自加運算」 這是錯的·
上述方法只是為了幫助你理解這個++a||++b&&++c;語句的意思
若我寫個a=b=c=1; ++a||++b&&++c||++a||++b&&++c||++a||++b&&++c;你說該怎麼理解?
挨個分析優先順序,?
那不得瘋了
所以那樣也沒必要++a||++b&&++c||++a||++b&&++c||++a||++b&&++c;只要由左到右依次執行這樣來判斷就好了就是(++a )語句1|| (++b&&++c||++a||++b&&++c||++a||++b&&++c)語句2
(++a)==2!=0所以嘛,語句2就不執行了 這樣判斷也符合 該語句的執行順序
4樓:匿名使用者
a=b=c=1; ++a||++b&&++c; 問語句執行順序?
解答:樓上 a19715指出了「賦值語句結合性 自右向左」是正確的,所以a=b=c=1;的執行順序是:
c=1;
b=1;
a=1;
樓上 翰海蒼狼 指出的 ++a||++b&&++c;語句的執行順序也是對的,我多囉嗦解釋一下啊。
首先,++出現在a之前,表示在執行「++a||++b&&++c;」語句之前完成自加運算,所以要先執行自加。同理,b和c也是先完成自加運算。這部分解釋可以表述為:
++a;//即執行a=a+1;
++b;//即執行b=b+1;
++c;//即執行c=c+1;
接下來,引用 a19715的一句話「&&的優先順序比||高」,不是貌似,的確是的哦,所以
b&&c被執行。注意,此時的b和c已經完成了自加運算。
a||(b&&c)最後被執行。
完畢。樓主明白啦不?@_@
5樓:通訊小王子
先++,再||跟&&
c語言中運算子有哪幾種,優先順序順序是怎樣
6樓:楓璽
c語言中,運算子除了常見的三大類,算術運算子、關
系運算子與邏輯運算子之外,還有一些用於完成特殊任務的運算子。
運算子的運算優先順序共分為15 級,1 級最高,15 級最低。 在表示式中,優先順序較高的先於優先順序較低的進行運算。而在一個運算量兩側的運算子 優先順序相同時,則按運算子的結合性所規定的結合方向處理。
一級運算子:標識,常量,字串文字量,優先順序提升表示式最優先執行。
二級運算子:陣列下標運算(expression)、函式呼叫(argument-expression-list)、成員訪問(identifier、 -> identifier)、字尾自增(i++)、字尾自減(i--)、 複合初始化(initializer-list)。
**運算子:字首自增(++i)、字首自減(--i)、單目轉型表式式(取地址& ,提領 * , 正號+ ,負號-、 位反~ 邏輯否!)、求型別長度(sizeof unary-expression)。
四級運算子:強制表示式成為type-name指定的型別( type-name ) cast-expression。
五級運算子:「 * 」 乘法運算子。
六級運算子:「 + 」加法運算子。
七級運算子:<< 左移運算子;>> 右移運算子。
八級運算子:<、<=、>、>=關係運算子。
九級運算子:「 == 」等於運算子;「 != 」不等於運算子。
十級運算子:「 & 」按位與運算子。
十一級運算子:「 ∧ 」按位異或運算子。
十二級運算子:「 | 」按位或運算子。
十**運算子:「&&」邏輯與運算子。
十四級運算子:「 || 」邏輯或運算子。
十五級運算子:? :條件運算子。
擴充套件資料
c語言中各運算子的結合性:
1、左結合性(自左至右):
例如算術運算子的結合性是自左至右,即先左後右。如有表示式x-y+z 則y 應先與「-」號結合,執行x-y 運算,然後再執行+z 的運算。這種自左至右的結合方向就稱為「左結合性」。
2、右結合性(自右至左)
自右至左的結合方向稱為「右結合性」。最典型的右結合 性運算子是賦值運算子。如x=y=z,由於「=」的右結合性,應先執行y=z 再執行x=(y=z)運算。
c語言運算子中有不少為右結合性,應注意區別,以避免理解錯誤。
7樓:匿名使用者
c語言的運算子包括單目運算子、雙目運算子、三目運算子,優先順序如下:
第1優先順序:各種括號,如()、等、成員運算子 . ;
第2優先順序:所有單目運算子,如++、--、!、~等;
第3優先順序:乘法運算子*、除法運算子/、求餘運算子%;
第4優先順序:加法運算子+、減法運算子-;
第5優先順序:移位運算子<<、>>;
第6優先順序:大於運算子》、大於等於運算子》=、小於運算子<、小於等於運算子<=;
第7優先順序:等於運算子==、不等於運算子!=;
第8優先順序:按位與運算子&;
第9優先順序:按位異或運算子^;
第10優先順序:按位或運算子|;
第11優先順序:邏輯與運算子&&;
第12優先順序:邏輯或運算子||;
第13優先順序:三目條件運算子 ?: ;
第14優先順序:各種賦值運算子,如=、+=、-=、*=、/= 等;
第15優先順序:逗號運算, 。
8樓:
優先順序 運算子 含義 運算子型別 結合方向
15 () 圓括號 單目 自左向右
下標運算子
—> 指向結構體成員運算子
、 結構體成員運算子
14 ! 邏輯非運算子 自右向左
~ 按位取反運算子
++ 自增運算子
-- 自減運算子
- 負號運算子
(型別) 型別轉換運算子
* 指標運算子
& 地址運算子
sizeof 長度運算子
13 * 乘法運算子 雙目 自左向右
/ 除法運算子
% 求餘運算子
12 + 加法運算子
- 減法運算子
11 << 左移運算子
>> 右移運算子
10 <、<=、>、>= 關係運算子
9 == 等於運算子
!= 不等於運算子
8 & 按位與運算子
7 ^ 按位異或運算子
6 | 按位或運算子
5 && 邏輯與運算子
4 || 邏輯或運算子
3 ?: 條件運算子 三目 自右向左
2 =、+=、-=、*=、
/=、%=、>>=、
<<=、&=、^=、|= 賦值運算子 雙目
1 , 逗號運算子 雙目 自左向右
中國物聯網校企聯盟技術部
c語言邏輯運算子,C語言中邏輯運算子的規則是什麼
伊婷婷 c語言中的邏輯運算子就三種,與 或 非,它們的優先極順序為非,與,或。它們含義如下,當操做數為真時,結果為假,反之也成立,並且它的優先極也最高,因為只有它是單目運算子,只有當兩個操做數都為真時,結果才為真,否則為假。只有當兩個操做數都為假時,結果才為假,否則結果為真。除了這些,邏輯運算子還有...
c語言邏輯運算子問題,c語言邏輯運算子 我不明白 和 到底是怎麼運算的
x y z 優先順序,所以上式等價於 x y z 這裡 x和 y z 是同級別的,表示式從左往右掃描,x成立,後面就直接跳過,輸出100 x y z 同理,優先順序 x y z x值是0,跳過 y 但是這隻能說明 的左邊是0,右邊還是要計算的,z執行了,所以最後輸出0,1,0 說明白點,這裡的優先順...
C語言邏輯運算,c語言邏輯運算子 我不明白 和 到底是怎麼運算的
if 條件表示式 語句1 語句2 if是條件判斷的關鍵字,後面的小括號裡包含的是條件表示式。如果條件表示式為非0,執行大括號 裡的 語句1 如果條件表示式值為0,則不執行 裡的 語句1 而是調過 語句1 直接執行 語句2 你這個問題的條件表示式是 i k i j j k 這個表示式被兩個 分為了三部...