運算子及表示式

2021-08-09 15:14:49 字數 3829 閱讀 2681

運算子的優先順序:這個表中囊括了單目運算子,雙目運算子及三目運算子的優先順序(1級最高,14級最低)。

運算子的結合性:c語言中各運算子的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。

接下來我為大家講述運算子以及表示式

(1)算術運算子:+、-、*、/、%、++、–;

注意:求餘運算子(模運算子)「%」參與運算的變數均為整型,除法運算子「/」當運算量均為整數時輸出也為整數,當運算量中有乙個是實型,則結果是雙精度實型。

(2)算術表示式:是由算術運算子和運算元組合成的式子,算術表示式用於各類數值運算。除求餘運算子%之外,運算物件可以是整型,也可以是實型。

(3)算術運算子在算術表示式之中的優先順序

括號運算子的優先順序最高(),所以當表示式之中存在括號運算子的時候先進行運算。

我們先來看一些問題幫助我們理解之中的優先順序。

int a = 4, b = 5, c = 6, d;

d = a - b + c;//d = 5

d = a - (b + c);//d = -7 因為括號運算子的緣故導致b與c先進行了相加,再進行減法運算

取模運算子%也可以通過乘除來實現
5 % 3 等價於 5 - (5 / 3) * 3(先取出整數,再乘,然後再相減)

接下來我們來看一看自增和自減運算子
int i = 1, j = 1, a, b

a = i++ + i++;//a = 2 , i = 3 因為這裡使用的是後自增運算子這時先用i進行相加再進行自增

b = ++j + ++j;//b = 6, j = 3 因為這裡使用的是前自增運算子這時先用j進行自增再進行相加運算

在這裡有些同學一定認為自己已經理解了,那麼我們再嘗試一道題
int i = 1, j = 1, a, b;

a = i++ + i++ + i++;//i = 4

b = ++j + ++j + ++j;//j = 4

大家猜一猜這個的結果是什麼

是 a = 3, b = 12?

對了一半,b回答錯了

b = 10

對於i++我們已經沒有問題了那麼現在就讓我告訴你j++在這裡是如何處理的吧

表示式中除了運算子優先順序還存在結合性,在 ++j + ++j + ++j中存在兩個同級的+運算,根據+運算子的左結合性,在編譯時則是這樣處理(++j + ++j)+ ++j,也就是(3 + 3)+ 4,所以得出結果才是10

(1)賦值運算子:賦值運算子用「=」表示,作用是將乙個資料賦給乙個變數

(2)賦值表示式:由賦值運算子「=」將乙個變數和乙個表示式連線起來的式子稱為賦值表示式,其一般形式為 變數=表示式。

(3) 通過賦值表示式達到型別轉換:在對賦值表示式求解過程中,如果賦值運算子兩邊的資料型別不一致,賦值時要進行型別轉換。轉換原則以「=」左邊變數為準

(4)復合的賦值運算子

復合的賦值運算子有:+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=;

a += 3 等價 a = a+3;

a -= 3 等價 a = a-3;

a *= 3 等價 a = a*3;

a /= 3 等價 a = a/3;

a %= 3 等價 a = a%3;

a <<= 1 將左邊數的二進位制各位向左移1個

a >>= 1 將左邊的二進位制數各位向右移1個,移到右端的低位被捨棄

a &= 1 將兩個數按二進位制位進行「與」運算。如果兩個相應的二進位制位都為1,則該位的結果值為1;否則為0。

a ^= 1 參與運算的兩個量按照對應的位進行異或運算,且0^0→0, 0^1→1, 1^0→1, 1^1→0此外,乙個數與0異或仍保持不變,即a^0=a乙個數與自己異或結果為0,即a^a=0;

a |= 1 參與運算的兩個量按照對應位進行或運算,且0|0→0, 0|1→1, 1|0→1, 1|1→1

賦值運算子的應用:

a = b = c = 5 等價於 a = (b = (c = 5));

當a = 12 時請計算 a += a -= a *= a

其實這個式子由於結合性的原因是從右至左計算 則順序是 a *= a ,a -= a,a += a所以無論a是何值結果都是零。

int a = 3,b = 5 ;

a ^= b;

b ^= a;

a ^= b;//a = 5, b = 3

這樣就實現了a與b的互換

(1)邏輯運算子:&&、||、!ab

a&&b

a||b

!atrue

true

true

true

false

true

false

false

true

false

false

true

false

true

true

false

false

false

false

true

(2)邏輯表示式:用邏輯運算子連線關係表示式或其他任意數值型表示式就構成邏輯表示式。

應用:

int a = 1,b = 2;

int c = a++ > 0 || b++ > 0;

大家可以猜測一下a和b的值,有的同學一定認為是a = 2, b = 3,但是這是錯誤的當a++>0成立的時候或運算子就不再繼續往下執行,所以最後的答案是a = 2,b = 2。

int a = 1,b = 2;

int c = a++ < 0 && b++ < 0;

當然與運算子也是相同的,當與運算子判斷第乙個式子不成立的時候他便不再繼續往下執行,所以最後的答案是a = 2,b = 2。

!a || a == b 等價於 (!x)||(a == b)

(1)條件運算子:由「?」和「:」構成, 並且 是乙個三目運算子。

(2)條件表示式:格式一般是 表示式1?表示式2:表示式3。

應用: int i = 1;

(i>1)? i++:i--;//i = 0

int a =2,b = 5 , c = 2,d = 3,max;

max = a>b ? a : c>d ? c : d;//max = 3

那麼也就是先判斷a>b為假,執行冒號之後的表示式c>d?c:d,判斷c>d為假,將冒號後的表示式賦給max。

(1)逗號運算子:用「,」將兩個表示式連線起來

(2)逗號表示式:一般形式為 表示式1,表示式2 求解過程為先求解表示式1再求解表示式2,整個逗號表示式的值為表示式2的值。

應用:

a = 3*5,a*4;

假設a的初值為3,有同學可能認為 a = a * 4,則a = 12:另一種則是 a = 3*5 是乙個 a*4 是乙個。然而這兩種都是錯的。正確的是先求解 a = 3*5 ,再求解 a * 4 ,得60,60作為整個表示式的值。

x = (a = 3, 6 * 3);

先將3賦給a,在將3*6賦給x,最終得到x=18。

x = a = 3, 6 * a;

先將3賦給a然後將a賦給x,最後將6*a作為整個表示式的值。

Python 運算子及表示式

5 賦值運算子 6 成員運算子 7 身份運算子 8 運算子優先順序 由高到低 9 表示式 expression 10 賦值即定義 示例 10.2 賦值即定義 自然數 結果是浮點數,整除是 print 2 1,3 2,2 111,4 3,4 2,4 0.5,5 2,4 2 3 10.018018018...

運算子 表示式

常見的運算子有,比較運算子 加減運算子 不列了,太多了 其實大可不必記那麼多運算子名稱,總體來說分為三大類 一元運算子 二元運算子 三元運算子 我們先來了解三個單詞 unary,binary,ternary,英文的翻譯是 由x部分組成 中國的前輩們將其翻譯成了一元,二元,三元,中文自帶的抽象屬性是不...

運算子與表示式

學習c語言時,在我們已經學習了型別,常量與變數,接下來就是通過學習運算子與表示式對型別,常量與變數進行運算。簡單說一下概念,用來對資料進行運算的符號,就可以稱為運算子。c中運算子和資料構成的式子,就稱為表示式。表示式再在其後加乙個分號,即構成c 語言語句。先說一下運算子吧。c語言的運算子多,一般記住...