c語言操作符總結

趣不再多,景不在遠,蓮窗竹屋,風月自賒。閒來無事,不如憶往昔。月光如水水如天,何事上心頭?好一個,操作符!

1.操作符分類

1.算術操作符 2.移位操作符
3.位操作符 4. 賦值操作符
5.單目操作符 6.關係操作符

2.算術操作符

+ - * / %
  • 1.“+”“-” 在進行算數運算時,被稱爲二元運算符,既這些運算符都是需要亮哥對象才能完成操作。
  • 2.”+”“-” 還可運用於標明或改變一個值得代數符號。
  • 3 .“%”只能用於整數與整數之間的計算。其餘算術運算符即可用於整數或浮點數之間的運算。
  • 4 .對於 / 操作符如果兩個操作數都爲整數,執行整數除法。而只要有浮點數執行的就是浮點數除法。且“/”右邊只能是非零的數。
整數/整數時,會發生截斷,會丟棄整個小數部分的數據。
整數,浮點數混合運算時,結果爲浮點數,因爲編譯器會先將數據類型變爲浮點數
在進行負整數與整數之間的/運算時,會發生趨零截斷在c99標準下會統一捨去小數部分

3.移位操作符

>> 右移操作符 << 左移操作符

屬於位操作符的一部分。
左移和右移操作符**,是在一個數的相應字節*8的二進制數的每一個bit位上進行相應操作的。**

>> 右移操作符
1.將該數的二進制的所有bit位上的0 1數整體向右移動 一個bit位
2.然後捨去最右邊的1個bit位,左邊最高bit位補數。(這個補數是有要求的)
  • 1.若該數是無符號數(unsigned xxxx)移位後,左邊的空餘bit位全部補0!
  • 2 .若該數是有符號數(signed xxxx)位移後,需考慮是邏輯位移,還是算數位移
  • 3 . 邏輯移位不需要考慮符號位(無腦補0),算術移位需要考慮符號位。
  • 算數位移 左邊空餘的bit位,補上與其符號位相同的數(若爲負數,則缺位補1,若爲整數嗎,缺位補0)
    看個簡單的例子
10000010算術右移111000001 (算術移位時符號位不動)
10000010邏輯右移101000001
<<左移操作符
1.將該數的二進制的所有bit位上的0 1數整體左右移動 一個bit位
2.然後捨去最左邊的1個bit位,右邊最高bit位補0。(這個補數是無要求的,無腦補0)

4.位操作符

& l ~ ^
按位與 按位或 按位取反 按位異或

位操作符,只能用於整形數據!包括char

這些操作僅僅針對每一個二進制位,不影響左右兩邊的位。

按位操作與邏輯操作是不同的,按位操作通過影響每一個操作位,來影響結果。
按位操作的用法一般有,掩碼,打開位,關閉位,切換位,檢查位的值等

5.賦值操作符 —> “=”

賦值操作符多用於對變量的賦值和初始化。

小擴展
1.在聲明(初始化)一個變量時,一般都會首先在內存上,開闢與數據類型的相應大小的空間,然後通過=,對其進行內容上的寫入。
2.所以在談一個變量時,一般都會相到三個方面。暨變量的空間大小,內容爲何,地址多少,這三個具有一定強相關的方面。
3.以=爲界,我們將=左邊的稱爲xx變量的左值,將=右邊的稱爲xx變量的右值。
4.一般來說(甚至是絕大數情況下)左值代表該變量的空間。右值代表該變量的內容。
5.我們可以將賦值語句理解爲。將xx的值寫入xx變量的空間中去。暨將xx的右值寫入xx的 左值。(xx爲隨意變量)
6.但是在賦值語句中=不能往被const限定的變量中寫入

c語言允許多重賦值
滿足如下形式

 int a=10,b=20,c=30,d=40;
 a=b=c=d;

賦值順序是從右往左進行。雖然c語言允許這麼寫,但是,爲了程序的可讀性,一般還是避免這種寫法。多寫一點,可以省去日後的麻煩。

6單目操作符

(1)

邏輯取反操作

! 是邏輯取反,注意與上面說到的按位取反 ~ 區分開。

(2)

符號運算,取負值
+ 符號運算,取正值

在這裏 + - 號作爲一元運算符。負號可以改變數的值,但是+號卻不能改變數值。

(3)

sizeof 以 字節 爲單位返回運算對象的大小

sizeof 不是函數,是操作符,是操作符。
運算對象可以是具體的數據對象(如,變量名)或類型。
如果運算對象是類型則必須用圓括號將其括起來。

sizeof()括號內如果放的是數組名,且只有數組名時,實在計算整個數組的大小

(4)

++(- -) 變量自增(自減
  1. ++(- -)分爲前置和後置兩種。
  2. 後置++(- -)暨形如++a(–a)這樣的,一般都會先進行相關的運算,在運算結束後,再對a變量+1(-1).
    int a=3;int b=a++;最後b=3,a=4
  3. 前置++(–),如++a這般的,一般會 先進行變量a的+1(-1)然後再進行算數運算。

一般來說在進行比較複雜的混合運算時,++ - -推薦用括號括起來。

(5)

& 對變量進行取地址操作
* 間接訪問操作符(對指針進行解引用 。聲明指針變量時也要用)
~ 每一個二進制bit位 ,按位取反

這兩個操作符一般多在指針哪裏使用。&在這裏是作爲取地址用的,不是按位與,也不是邏輯與(&&)

7邏輯操作符與關係操作符

> 大於 <小於
>= 大於等於 <= 小於等於
!= 不等於 == 等於
&& 邏輯與 ll 邏輯或 ! 邏輯非

邏輯與或非之間在進行混合運算時需要注意優先級問題。推薦用()括起來。

8條件操作符、逗號表達式和下標引用、函數調用和結構成員

(1)條件操作符

exp1 ? exp2 : exp3

若果exp1爲真,則執行exp2。否則則執行exp3
具體例子

c=a>b?a:b;

若a>b則c=a;否則c=b;

(2)逗號表達式

exp1, exp2, exp3, …expN

逗號表達式,就是用逗號隔開的多個表達式。 逗號表達式,從左向右依次執行。整個表達式的結果是最後一個表達式的結果。

(3)下標引用、函數調用和結構成員

1.[ ] 下標引用操作符
操作數:一個數組名 + 一個索引值
2.xxx( ) 函數調用操作符 接受一個或者多個操作數:
第一個操作數是函數名,剩餘的操作數就是傳遞給函數的參數。
3.訪問一個結構的成員

. 結構體.成員名
-> 結構體指針->成員名

9優先級及其他注意!

在進行復雜的混合運算時,時刻需要注意符號之間的優先級。有可能在我們邏輯上的優先級順序和實際編譯器執行的順序是大大不同的。
所以,我們可以通過加括號的方法,來防止優先級錯誤的問題。
另外:

  • 如果一個變量出現在一個函數的多個參數中,不要對該變量使用遞增或遞減運算符
  • 如果一個變量多次出現在一個表達式中,不要對該變量使用遞增或遞減運算符

如有不足,後續會進行補充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章