表示式與運算子

2021-10-07 18:21:17 字數 3826 閱讀 4454

一、什麼是表示式?

表示式就是表達某種意思的式子。

在c語言中,表示式用運算子連線運算元的式子。

廣義上講,有;的就是語句,沒有分號的就是表示式。

二、c語言中的運算子:

(1)算術運算子:  雙目運算子(需要連線兩個運算元),結合性:左->右

* /  %  +  -

★注意整數/整數,其結果還是整數,若想要結果為實數,可在分子*1.0

隱式型別轉換:不同資料型別之間進行運算時,其結果會轉化為精度高的那個資料型別。

(無符號和有符號進行計算,結果為無符號)

%:取餘運算子,在c語言中,要求兩個運算元都必須為整數

5%3   2%3   -5%2   5%-2   -5%-2

(2)關係運算子: 雙目運算子,左->右,表達兩個式子的關係

>  >=  <  <=

==  !=    

由關係運算子連線運算元組成的表示式,叫做關係表示式

關係表示式的值:  1(關係成立)      0(關係不成立)

5>4>3

==> 1>3

==> 0

(3)邏輯運算子:  表達某數理邏輯的表示式

邏輯表示式的值:  真(非0)    假(0)

★任何非0的數都表示真,但是如果表示式的結果為真時,只能是1

!  (邏輯非),單目運算子,取邏輯上的反

!!(-1)  ==> 1

&& (邏輯與),雙目運算子,"並且",結合性 左->右

a && b && c

|| (邏輯或),雙目運算子,"或", 結合性 左->右

★在c語言中,運算是"惰性運算"。如果事先知道了表示式的值,那麼它就不會

去運算後面的式子啦。

eg:   a && b && c

只有當a的值為真時,才有必要去判斷b的值

只有a和b的值都為真時,才有必要去判斷c的值

a || b || c

只有當a的值為假時,才有必要去判斷b的值

只有當a和b的值都為假時,才有必要去判斷c的值

(4)位運算:按bit位來進行位運算操作的運算子

~  (按位取反):單目運算子

&  (按位與): 雙目運算子

1 & 1 ==> 1

1 & 0 ==> 0

0 & 0 ==> 0

0 & 1 ==> 0

|  (按位或):  雙目運算子

1 | 1 ==> 1

1 | 0 ==> 1

0 | 1 ==> 1

0 | 0 ==> 0

^  (按位異或): 雙目運算子,相同為假,不同為真

1 ^ 1 ==> 0

1 ^ 0 ==> 1

0 ^ 1 ==> 1

0 ^ 0 ==> 0

<< (左移): 雙目運算子,按bit位往左邊移

eg:  int a = 2<<1;  //4

把數值2按bit位往左邊移1個bit位,

高位消失,低位補0

>> (右移): 雙目運算子,按bit位往右邊移

邏輯右移:  高位補0

算術右移:  高位補符號位

c語言標準中,沒有規定右移是邏輯右移和算術右移,在不同的編譯器和處理器中,

實現方法可能不一樣。

(5)賦值運算子:  雙目運算子, 右->左,優先順序排倒數第二

=  eg:   a = 5+3;

賦值表示式的值為賦值符號左邊的值,賦值運算子的左邊(左運算元)必須為"可寫的位址"

5 = 3;//error

復合的賦值運算子:賦值運算子可以和算術運算子、位運算子組成復合的賦值運算子

+= :    a += 5  ==>  a = a+5

-=        &=

*=        |=

/=        ^=

%=        <<=

~=        >>=

(6) 條件運算子  ? :     三目運算子    右->左

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

求值順序:  先計算表示式1的值,如果表示式1的值為真,則整個條件表示式的值為表示式2的值,

如果表示式1的值為假,則整個條件表示式的值為表示式3的值

eg:  printf("the max is %d\n",a>b?a:b);        

注意:條件表示式也有惰性運算

(7) 逗號運算子:  雙目運算子,優先順序最低的,  左->右

表示式1 , 表示式2

求值順序: 先求表示式1的值,再求表示式2的值,整個逗號表示式的值為表示式2的值

逗號表示式的擴充套件

表示式1,表示式2,表示式3,...表示式n

求值順序:  先求表示式1,再求表示式2,...最後求表示式n的值,

整個逗號表示式的值為表示式n的值

注意:  逗號表示式要與引數列表進行區分

(8)☆指標運算子(* , &)

(9)求位元組運算子(sizeof)

求位元組運算子的結果只跟圓括號內是什麼資料型別有關,單位為位元組

sizeof(1.0)  == sizeof(double)

sizeof(1.0f) == sizeof(float)

sizeof(2l)    == sizeof(long)

sizeof(2u)   == sizeof(unsigned int)

short s;

sizeof(s+1)  == sizeof(int)

(10)☆分量運算子 (.  ->)

用於求結構體變數的成員變數

a.i;

p->i;//p是結構體指標

(11)☆下標運算子 ( )

取陣列中的元素

int a[10];

a[3]  a[4]

(12)強制型別轉換運算子

(資料型別)

eg:  float a=3.6;

printf("%d\n",(int)a);

(13)自增、自減運算子(++,--): 單目運算子

表示式的值        執行完這個表示式後i的值

i++         i                   i+1

++i         i+1                 i+1

i--         i                   i-1

--i         i-1                 i-1

注意:(1)要避免 i=i++ 這種用法

(2)要避免在避免在乙個表示式裡對乙個變數重複用++,可能會被編譯器優化

int i=2;

(++i)+(++i)+(++i)

運算子的優先順序和結合性

() -> .             自左向右

! ~ ++ --  +-(正負號)  自右向左       單目運算子

*  /  %                自左向右       算術運算子

+  -    

<  <=  >  >=           自左向右       關係運算子

==  !=

& ^ |  << >>           自左向右       位運算子

&&                     自左向右       邏輯運算子

||? :                    自右向左       條件運算子

= += -= *= /=

%= &= |= ^= <<= >>=    自右向左       賦值運算子

,                      自左向右       逗號運算子

同級優先順序的運算子,實際優先順序為左側優先

運算子與表示式

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

運算子與表示式

數 算 注意事項 兩端的變數必須是同種型別,並返回同種型別。取餘運算,負數的餘數符號與被模數符號相同,1 5 1,1 5 1 num n,n 0,結果範圍 0,n 是週期函式。注意整除問題 1 2 0 整數的除法是整除 1.0 2 0.5 1d 2 0.5 單獨的前 後自增或自減是沒區別的,有了賦值...

運算子與表示式

1.了解什麼是表示式 表示式是由運算子與資料組成的式子,每乙個表示式都有運算的結果。2.我的老師每次使用這個運算子的時候都會說到這個老梗,sizeof是運算子不是函式,別看sizeof後面還要加乙個括號,但不是所有的都是函式。這也從側面sizeof在面試題中經常出現。3.隱式轉換型別 由於有的編譯系...