C語言中的運算子條件運算子運算過程的講解

2021-03-04 09:21:24 字數 7158 閱讀 6861

1樓:瀚漠

z=(x=1)?(y=1,y+=x+5):(x=7,y=3);

這句主要的有

du2個運zhi算符

dao,一個條件運算子 ?: ,一個賦內值運算子 z=...

優先順序是條件運算子比容較高,可以轉換成:

z= ((x=1)?(y=1,y+=x+5):(x=7,y=3));

條件運算子:計算 ?前面表示式,為真返回冒號前面的,為假返回冒號後面的。

因為 x=1 表示式整體值為 1,即為真,返回 (y=1,y+=x+5) 表示式的值,這裡是逗號表示式,唯一一個不知道幾目的運算子,像++,--屬單目,+ , - 等是雙目,條件是三目運算子。。。。

逗號表示式從左至右運算,返回最右邊表示式的值,這裡返回 y=y+x+5,即返回7

所以有結果,z=7,x=1,y=7

w=y*'a'/4;

把字元'a'做整數運算,取ascii碼97w=7*97/4;

結果為169.75,但是由於w為整數,取整數部分為169,列印時由於你沒用格式控制、空格等,

所以列印出:177169

c語言中條件運算子是什麼意思

2樓:a羅網天下

條件運算子(? : )是一個三目運算子,即有三個運算元。

使用條件運算子(?:)可以實現 if else 的功能,其一般形式為:

表示式1 ? 表示式2 : 表示式3

例如條件語句:

if(a>b) max=a;

else max=b;

可用條件表示式寫為

max=(a>b) ? a : b;

執行該語句的語義是:如a>b為真,則把a賦予max,否則把b 賦予max。

if條件語句例子如下:

直接編譯,程式輸出結果中任意輸入年齡,程式執行結果如下圖所示:

知識擴充套件:條件運算子的運算優先順序低於關係運算子和算術運算子,但高於賦值符條件運算子?和:是一對運算子,不能分開單獨使用。

條件運算子的結合方向是自右至左。

3樓:冰凍了你呢

條件運算子

(?:)是c語言中唯一具的三目運算子,就是說它有三個運算物件。條件運算子的形式是"? :"由它構成的表示式稱為條件表示式

條件表示式的形式為:

表示式1 ? 表示式2 : 表示式3

例如:(a>b)?a+b:a-b

其中,如果a=2,b=1,那麼a>b成立,執行a+b這個表示式,運算結果為3;但如果a=2,b=3,那麼a>b不成立,那麼執行a-b這個表示式,運算結果為-1.

【拓展資料】

(條件表示式1 ? 條件表示式2 : 條件表示式3)條件運算子的功能類似if語句,

例如:if (條件表示式1)

條件表達是2;

else

條件表示式3;

你的思路是不對的,應該是判斷"條件表達是1"真假,若真執行"條件表達是2",若假執行"條件表達是3",在執行了"條件表達是2"或者"條件表達是3"之後就

就執行條件語句後的內容了.

4樓:天水資訊釋出

代表意思如下:

關係運算和邏輯運算的結果都是邏輯值,即"真"和"假"。

由於c語言中沒有邏輯型資料,因此c語言規定用整型資料來表示邏輯值。

用整數值1表示邏輯"真",用整數值0表示邏輯"假"。在c語言中,將非0就視為"真"。

關係運算實際上是邏輯比較運算,它是邏輯運算中的一種。關係運算子的作用是確定兩個資料之間是否存在某種關係。

條件運算子優先順序高於賦值、逗號運算子,低於其他運算子。

5樓:莫道不知卿

表示式1成立:值為表示式2,不成立則為表示式3。

如:max=a>b?a+3:b+4;

如果a>b,那麼輸出結果為a+3。不成立輸出結果為b+4。

6樓:匿名使用者

?:的意思是"?"前的表示式運算結果如果為true,則取":"前的表示式值,否則取":"後的表示式值。

比如c=a>b?a:b;

是求a,b的最大值。

7樓:匿名使用者

有點類似if else 的意思 具體看這個:

c語言中,條件運算子是怎樣的法則?

8樓:匿名使用者

由高到低是:!(非),&&(與),||(或)&&左邊為0則不看右邊運算,||左邊為1不看右邊!

例:main()

執行結果:a=1

b=0c=3

d=1程式執行說明:先執行!b>a即0>a,結果為0(b=0)再執行0&&c結果為0,執行c>2結果為10||1結果為1

因為執行順序為右結合,所以將整個表示式的結果給 d為1}條件運算子:

(表示式1)?(表示式2):(表示式3)

運算規劃:如果表示式1為真,返回表示式2的結果,否則返回表示式3的結果

例如:a=1,b=2

(a>b)?a:b

返回值為2

注意表示式是右結合的.

例:a=1,b=2,c=3

(a>b)?a:b?c:b

相當於(a>b)?a:(b?c:b)

返回值為3

9樓:感冒天天見

我記得好像有一個是? :,例a>b?

1:0.意思就是a>b嗎?

如果是那麼這個表達示的結果是1,否剛就是0.a>b是一個條件,那麼這個表達示只要是一個非0值就會取:之前的值,否則就取:之後

10樓:匿名使用者

not and or 高到低

關於c語言條件運算子的結合順序?!!!

11樓:匿名使用者

樓主注意,結合順序不等於求值順序。條件表示式的求值順序是這樣規定的:

test ? exp1 : exp2;

條件測試部分test非零版,表示式權exp1被求值,否則表示式exp2被求值,並且保證exp1和exp2兩者之中只有一個被求值。該運算子是右結合的值是要告訴你:後面不管跟了多大多長的表示式只要它是合法的那就整個被看作exp2。

所以a>b?a:c>d?c:d 當然相當於a > b ? a : (c>d?c:d)

別說你後面只是一個(c>d?c:d),就算你後面是優先順序比條件運算子還高的操作符組成的表示式,它也得按照條件運算子的求值規則求值。

比如說a > b ? (x = 200) : (x+y);

加號的優先順序比條件運算子高好幾個等級,答案還不是照樣是200。這樣,我看int a = x>y?(x = 200):(y = 350); 就不要我再作解釋了吧!

12樓:匿名使用者

200結合順序是怎樣和哪個先執行是兩回事。

這裡很明顯是先比較x>y,然後選擇了執行a=x=200。

y=350沒有做,所以y最後還是50

環境:vc++6.0,devcpp4.9.9.0

13樓:匿名使用者

max = num1>num2?num1:num2是一個三元運算子,?前的為真,則執行:前的

?前的為假,則執行:後的

因此,答案為200.

14樓:匿名使用者

200x>y是真那麼執行x=200,最後賦值給a的也就是200

這還用除錯?跟你說的結合有關係麼?

c語言的運算子的優先順序:邏輯運算子、條件運算子、賦值運算子、關係運算子、算術運算子。它們之間的優先順序

15樓:反轉的天空之城

1、最高階:出現同級別運算子時的結合方向是從左往右(下面級別沒寫結合順序時,預設是從左往右)。

( )圓括號

[ ]下標運算子號

->指向結構體成員運算子

.結構體成員運算子

2、第二級:!、~、++、--、-、(型別)、*、&、sizeof。

這一級都是單目運算子號,這一級的結合方向是從右向左。

比如出現*p++,這時*和++同級別,先算右邊,再左邊。

所以*p++等價於*(p++),而不是(*p)++。

3、第**:+、-、*、/、%

這一級都是算術運算子,結合順序和數學學習中一致的,先乘除取餘數,後加減。

4、第四級:<<、>>

這是左移、右移運算子,位運算時可能需要用到。

5、第五級:<、<=、>、>=、!=、==

這些運算子也稱為關係運算子,其中<、<=、>、>=高於!=、==。

6、第六級:&、^、|

這三個符號也是位運算子號,其中內優先順序,&>^>|。

7、第七級:&&、||

邏輯與&&優先順序大於邏輯或||。

8、第八級:? :

也稱為條件運算子號,是c語言中唯一的一個三目運算子,結合順序是從右往左。

9、第九級:=、+=、-+、*=、/=、%=

這些運算子也叫做賦值運算子,除此之外,>>=、<<=、&=、^=、|=這些賦值運算子也在這一級別內,結合順序是從右往左。

10、最低階:,

逗號運算子也稱為順序求值運算子,在c語言中,運算級別最低。

c語言是一種計算機程式設計語言,它既具有高階語言的特點,又具有組合語言的特點。它由美國貝爾研究所的d.m.

ritchie於2023年推出,2023年後,c語言已先後被移植到大、中、小及微型機上,它可以作為工作系統設計語言,編寫系統應用程式,也可以作為應用程式設計語言,編寫不依賴計算機硬體的應用程式。它的應用範圍廣泛,具備很強的資料處理能力,不僅僅是在軟體開發上,而且各類科研都需要用到c語言,適於編寫系統軟體,三維,二維圖形和動畫,具體應用比如微控制器以及嵌入式系統開發。

運算子用於執行程式**運算,會針對一個以上運算元專案來進行運算。例如:2+3,其運算元是2和3,而運算子則是「+」。

在vb2005中運算子大致可以分為5種型別:算術運算子、連線運算子、關係運算子、賦值運算子和邏輯運算子。

16樓:

邏輯——算數——關係——條件判斷——賦值

17樓:匿名使用者

這個可以找一本c++的書看一下,上面有一章就是專門介紹這個的,有個表,一目瞭然,便於記憶,希望你能多看看書!

18樓:匿名使用者

一般而言,單目運算子優先順序較高,賦值運算子優先順序低。算術運算子優先順序較高,關係和邏輯運算子優先順序較低。多數運算子具有左結合性,單目運算子、三目運算子、賦值運算子具有右結合性。

恩,問這個問題的人太多了,懶得繼續回答,直接貼上來自己看。。。

優先順序運算子

名稱或含義

使用形式

結合方向說明1

陣列下標

陣列名[常量表示式]

左到右()

圓括號(表示式)/函式名(形參表)

.成員選擇(物件)

物件.成員名

->成員選擇(指標)

物件指標->成員名2-

負號運算子

-表示式

右到左單目運算子

(型別)

強制型別轉換

(資料型別)表示式

++自增運算子

++變數名/變數名++

單目運算子

--自減運算子

--變數名/變數名--

單目運算子

*取值運算子

*指標變數

單目運算子

&取地址運算子

&變數名

單目運算子

!邏輯非運算子

!表示式

單目運算子

~按位取反運算子

~表示式

單目運算子

sizeof

長度運算子

sizeof(表示式)3/

除表示式/表示式

左到右雙目運算子*乘

表示式*表示式

雙目運算子

%餘數(取模)

整型表示式/整型表示式

雙目運算子4+

加表示式+表示式

左到右雙目運算子-減

表示式-表示式

雙目運算子

5<<左移變數《表示式

左到右雙目運算子

>>右移變數》表示式

雙目運算子

6>大於表示式》表示式

左到右雙目運算子

>=大於等於

表示式》=表示式

雙目運算子

<小於表示式《表示式

雙目運算子

<=小於等於

表示式<=表示式

雙目運算子7==

等於表示式==表示式

左到右雙目運算子

!=不等於

表示式!= 表示式

雙目運算子8&

按位與表示式&表示式

左到右雙目運算子9^

按位異或

表示式^表示式

左到右雙目運算子10|

按位或表示式|表示式

左到右雙目運算子

11&&

邏輯與表示式&&表示式

左到右雙目運算子

12||

邏輯或表示式||表示式

左到右雙目運算子

13?:

條件運算子

表示式1? 表示式2: 表示式3

右到左三目運算子14=

賦值運算子

變數=表示式

右到左/=

除後賦值

變數/=表示式

*=乘後賦值

變數*=表示式

%=取模後賦值

變數%=表示式

+=加後賦值

變數+=表示式

-=減後賦值

變數-=表示式

<<=左移後賦值

變數<<=表示式

>>=右移後賦值

變數》=表示式

&=按位與後賦值

變數&=表示式

^=按位異或後賦值

變數^=表示式

|=按位或後賦值

變數|=表示式15,

逗號運算子

表示式,表示式,...

左到右從左向右順序運算

說明:同一優先順序的運算子,運算次序由結合方向所決定。

簡單記就是:! > 算術運算子 > 關係運算子 > && > || > 賦值運算子

請問c語言中的算術運算子與關係運算子有什

是賦值符號,比如把a值複製到b b a 的關係運算子,是判斷兩邊值是否一樣,返回的是bool型別,貌似在各種語言中 都不能賦值吧!才能賦值,是關係運算子,說白了也就是做比較的。是賦值號 是和 一樣的比較符號 c語言中,賦值運算子 與關係運算中的 有什麼區別?能不能舉一些例子?謝了,急急急!區別在這,...

c 運算子過載,c 運算子過載

其實第一個回答的程式已經ok了,這裡簡要說明一下 首先,名稱空間的問題。cout endl以及ostream都是定義在std這個名稱空間下的,因此在使用前必須包含這個一個using指示 using namespace std 表明可以使用std裡面的所有內容。除此以外還有兩種選擇 1.使用作用域運算...

c語言中關係運算子的優先順序高於邏輯運算子嗎

是的不是有個優先順序歌嗎 圓方括號箭頭一句號.自增自減非反負,針強地址長度,乘除,加減,再移位,小等大等,等等不等,八位與,七位異,六位或,五與,四或,三疑,二賦,一真逗.c語言中邏輯運算子 的優先順序高於算術運算子。邏輯非 即 操作符 優先順序高於算術運算子。所有的單目操作符優先順序都高於雙目和三...