oc溫習二:基本運算及基本運算符

C語言一共有34種運算符,以下:面試

運算符分類:函數

1.按照功能劃分:設計

(1)算術運算符3d

  • + 加法運算符
  • - 減法運算符 或者負值運算符
  • * 乘法運算符
  • / 除法運算符
  • % 模運算符,或者取餘運算符,要求%兩側均爲整形

(2)關係運算符blog

  • < 小於運算符
  • <= 小於等於運算符
  • > 大於運算符
  • >= 大於等於運算符
  • == 等於運算符
  • != 不等於運算符

(關係運算的結果成立就爲「真」==1, 不成立則爲「假」==0)內存

 

(3)邏輯運算符程序設計

  • && 邏輯與運算符
  • ||    邏輯或運算符
  • !  邏輯非運算符

(&按位與 若是兩個相應的二進制都爲1, 則該位的結果值爲1, 不然位0;class

    | 按位或者兩個相應的二進制位 只要有一個爲1, 該位的結果值爲1;變量

    ^ 按位 異或 若參加運算的兩個二進制位值相同 則爲0, 不然爲1;數據類型

    ~ 取反 是一元運算符, 用來對一個二進制數按位取反,即將0變爲1,將1 變爲 0;

    << 左移用來將一個數的各二進制位所有左移N位,右補0;

    >> 右移將一個數的各二進制位右移N位,移到右端的低位被捨棄,對於無符號數,高位補0)

 

基本運算

(1)運算符根據參與運算的操做數的個數,分爲:

  • 單目運算:只有一個操做數, 如:i++;
  • 雙目運算:有兩個操做數,  如a+b;
  • 三目運算:也成問號表達式, 如 a > b ? 1 : 0;

(2)優先級:oc中,運算符的運算優先級共分爲15級。1級最高,15級最低。在表達式中,優先級較高的先於優先級較低的進行運算。而在一個運算量兩側的運算符優先級相同時,則按運算符的 結合性所規定的結合方向處理。(注:只須要記住( )優先級最高便可)

 

(3)c語言中,各類運算符的結合性分爲兩種,左結合性(自左向右)和右結合性(自右向左)

  • 自左向右,即先左後右:例如表達式:x-y+z, 則y應與「-」號結合,執行x-y 運算,而後再執行+z 運算;
  • 自右向左:最典型的右結合性運算符是負值運算符,例如:x=y=z, 因爲「=」 的右結合性,應先執行 y=z 再執行 x= (y=z) 運算。

* 整數除於整數,求出來的結果依然是整數

* 浮點型賦值給整型會損失小數部分

* %兩側必須都爲整數

* 利用%求出來的餘數是正數仍是負數,由%左邊的被除數決定,被除數是正數,餘數就是正數,反之則反

 

(4)算術運算的注意點

  • 自動類型轉換, 例如:int b = 10.5 + 1.7;
  • 自動將大類型轉換爲了小類型,會丟失精度 自動類型提高, 例如:int b = 10.5 + 10;
  • 將右邊的1提高爲了double類型,例如:double b = 1.0 / 2;(解決除法的精度問題);
  • 強制類型轉換, 例如:double a = (double)1 / 2;  其中,錯誤寫法:double b = (double)(1 / 2)
  • 求餘運算注意事項:參與運算的必須是整數,錯誤寫法:12.3 % 3;m%n 求餘,至關於m/n 獲取餘數;運算結果的正負性取決於第一個運算數,跟後面的運算數無關,例如:10 % -3 = 1

(5)賦值運算符

  • 賦值運算符
    • 簡單賦值運算符: =;
    • 複合賦值運算符: +=、-=、*=、/=、%=
      • /= 除後賦值 變量/=表達式 如: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

  • 賦值表達式
    • 將同類型的數據(如常量、變量、函數等),用運算符號按必定的規則鏈接起來的、有意義的式子稱爲表達式。
    • 等號=左邊只能是變量,不能是常量,下面的寫法是錯誤的:10 = 10 + 5;

(6)自增運算符

    在程序設計中,常常遇到「i=i+1」和「i=i-1」這兩種極爲經常使用的操做。C語言爲這種操做􏰁供了兩個更爲簡潔的運算符,即++和--,分別叫作自增運算符和自減運算符。它們是單目運算符,是從右向左結合的算術運算符

    在程序設計中,常常遇到「i=i+1」和「i=i-1」這兩種極爲經常使用的操做。C語言爲這種操做􏰁供了兩個更爲簡潔的運算符,即++和--,分別叫作自增運算符和自減運算符。它們是單目運算符,是從右向左結合的算術運算符。

int b;

int a = 10;

b = ++a;//若是++在前表明先自增再參與其它運算

//    a = a + 1;  b = a;

//    a = 11  b = 11

    後綴表達式:x++, x--;先用x的當前值做爲表達式的值,再進行自增自減1運算。即「先用後變」,也就是先用變量的值參與運算,變量的值再進行自增自減變化。

int b;

int a = 10;

b = a++;//若是++在後表明先參與其它運算再自增

//    b = a; a = a + 1;

//    a = 11  b = 10

 

 自增、自減運算只能用於單個變量,只要是標準類型的變量,不論是整型、實型,仍是字符型變量等,但不能用於表達式或常量。如:++(a+b), 與5++, const int N=0; N++; 等都是錯誤 的。 而i+++j++、++i+(++j)、++a+b++、++array[--j]等,這些都是合法的

(7)逗號運算符
  • 基本概念用法: 在C語言中逗號「,」也是一種運算符,稱爲逗號運算符。 其功能是把多個表達式鏈接起來組成一個表達式,稱爲逗號表達式。
通常形式形式:表達式1,表達式2,… …,表達式n;

例如:a=a+1,b=3*4;
  •  求值過程:表達式1,表達式2,… …,表達式n -----先算表達式1,再算表達式2,依次算到表達式n; 其中 整個逗號表達式的值是最後一個表達式的值
b = (a=4, ++a, a * 7);

// 1.先執行第一個表達式, 將4賦值給a

// 2.再執行第二個表達式, 讓a自增變爲5

// 3.再執行第三個表達式, 5 * 7

// 4.最後將最後一個表達式的值做爲"逗號表達式的值"返回賦值給b, 因此b等於35
  •  逗號運算符使用注意:

  程序中使用逗號表達式,一般是要分別求逗號表達式內各表達式的值,並不必定要求整個逗號表表達式的值。

 

(8)sizeof的運算符

  • sizeof的運算符的介紹:sizeof的能夠用來計算一個變量或一個常量,一種數據類型所佔的內存字節數
  •   格式:用法:sizeof的(常量/變量)
  •   注意:sizeof的不是一個函數,是一個運算符。(面試題)

(9)關係運算符

  • 關係運算符的運算結果只有2種:若是條件成立,結果就爲1,也就是「真」;若是條件不成立,結果就爲0,也就是「假」。
  • 關係運算符都是雙目運算符,其結合性均爲左結合
例如4>3>2:先算4>3,條件成立,結果爲1。再與2比較,即1>2,條件不成立,結果爲0。
所以4>3>2的結果爲0。
  •  關係運算符優先級:關係運算符中==、!=的優先級相等,<、<=、>、>=的優先級相等,且前者的優先級低於後者
例如2==3>1:先算3>1,條件成立,結果爲1。再計算2==1,條件不成立,結果爲0。
因
此2==3>1的結果爲0。
  •  關係運算符的優先級小於算術運算符
例如3+4>8-2:先計算3+4,結果爲7。再計算8-2,結果爲6。最後計算7>6,條件成立,
結果爲1。所以3+4>8-2的結果爲1。

 

(10)類型轉換問題:

  • 類型轉換分爲:隱式數據類型轉換和顯示數據類型轉換
  • 自動轉換(隱式轉化):
    (1)自動轉換遵循如下規則:
    
    *相同數據類型的值才能進行運算(好比加法運算),並且運算結果依然是同一種數據類
    型。系統會自動對佔用內存較少的類型作一個「自動類型提高」的操做
    
    *若參與運算量的類型不一樣,則先轉換成同一類型,而後進行運算。
    
    *轉換按數據長度增長的方向進行,以保證精度不下降。如int型和long型運算時,先把int量轉 成long型後再進行運算。
    
    *全部的浮點運算都是以雙精度進行的,即便僅含float單精度量運算的表達式,也要先轉換成double型,再做運算。
    
    *char型和short型參與運算時,必須先轉換成int型。
    
    *在賦值運算中,賦值號兩邊量的數據類型不一樣時,賦值號右邊量的類型將轉換爲左邊量的類型。若是右邊量的數據類型長度比左邊長時,將丟失一部分數據,這樣會下降精度,丟失的部分 按四捨五入向前舍入。
  • 強制類型轉換(顯示轉換):
  •   強制類型轉換是經過類型轉換運算來實現的
    其通常形式爲:(類型說明符) (表達式)
    強制類型轉換注意點:
    (1)將大範圍的數據賦值給小範圍變量時,系統會自動作一個強制類型轉換的操做,這樣容 易丟失精度 (2)類型說明符和表達式都必須加括號(單個變量能夠不加括號),如把(int)(x+y)寫成(int)x+y則了把x轉換成int型以後再與y相加了。 (3)不管是強制轉換或是自動轉換,都只是爲了本次運算的須要而對變量的數據長度進行的臨時性轉換,而不改變數聽說明時對該變量定義的類型。

     參考文章:http://www.jianshu.com/p/141e6af7395e

相關文章
相關標籤/搜索