1. 程式人生 > >C語言操作符和表示式

C語言操作符和表示式

目錄

一、操作符

C語言操作符的一些需要注意的坑。

二、表示式

問題表示式問題在哪裡。

正文

一、操作符

  1. 算數操作符

    + - * / %

    注意點

    • 除了%操作符外,其他的幾個算數操作符可以用於整數和浮點數,%的運算元只能是整數。
    • 對於/操作符如果兩個運算元都是整數,執行整數除法。只要有一個是浮點數則執行浮點數除法。
  2. 移位操作符

    左移<< 右移>>

    • 左移規則:左邊拋棄,右邊補零。

      int num = 10;
      num<<1;	//num本身並不發生改變
      num = num<<1;	//num發生改變
      
    • 右移規則有兩種:

      • 邏輯移位:左邊用0填充,右邊丟棄。
      • 算數移位:左邊用原該值的符號位填充,右邊丟棄。

      取決於編譯器,常用編譯器如VS等用算數右移,算數右移也是比較和邏輯的,如果一個負數按邏輯移位右移,左邊用0填充,就會變為正數。

      對於移位運算,不要移動負數位,這個標準是未定義的,如:

      int num = 10;
      num >> 1;	// error!
      
  3. 位操作符

    &:相同為1,相異為0

    |:有1為1,全0為0

    ^:相同為0,相異為1

    他們仨的運算元必須是整數!

    一些題目:

    1)不建立臨時變數(第三個變數),實現兩個數的交換。

    2)求一個整數儲存在記憶體中的二進位制序列(或求二進位制中1的個數)。

  4. 賦值操作符

    ?不要在if中用=

    ,不要連續賦值,如:a=x=y+1,可讀性下降。

    複合賦值符號會讓程式碼簡潔一點。

     int a = 10;
     x = x+10;
     x += 10;
    
  5. 單目操作符

    ! + -

    &(取地址)

    sizeof(以位元組為單位)

    ~(對於一個數的二進位制按位取反)

    前置和後置-- ++

    *(解引用)

    (型別) 強制型別轉換

  6. 關係操作符

  7. 邏輯操作符

  8. 條件操作符

  9. 下標引用、函式呼叫、結構成員

二、表示式求值