C語言操作符和表示式
阿新 • • 發佈:2018-12-16
目錄
一、操作符
C語言操作符的一些需要注意的坑。
二、表示式
問題表示式問題在哪裡。
正文
一、操作符
-
算數操作符
+ - * / %
注意點
- 除了
%
操作符外,其他的幾個算數操作符可以用於整數和浮點數,%
的運算元只能是整數。 - 對於
/
操作符如果兩個運算元都是整數,執行整數除法。只要有一個是浮點數則執行浮點數除法。
- 除了
-
移位操作符
左移<< 右移>>
-
左移規則:左邊拋棄,右邊補零。
int num = 10; num<<1; //num本身並不發生改變 num = num<<1; //num發生改變
-
右移規則有兩種:
- 邏輯移位:左邊用0填充,右邊丟棄。
- 算數移位:左邊用原該值的符號位填充,右邊丟棄。
取決於編譯器,常用編譯器如VS等用算數右移,算數右移也是比較和邏輯的,如果一個負數按邏輯移位右移,左邊用0填充,就會變為正數。
對於移位運算,不要移動負數位,這個標準是未定義的,如:
int num = 10; num >> 1; // error!
-
-
位操作符
&:相同為1,相異為0
|:有1為1,全0為0
^:相同為0,相異為1
他們仨的運算元必須是整數!
一些題目:
1)不建立臨時變數(第三個變數),實現兩個數的交換。
2)求一個整數儲存在記憶體中的二進位制序列(或求二進位制中1的個數)。
-
賦值操作符
?不要在if中用
=
a=x=y+1
,可讀性下降。複合賦值符號會讓程式碼簡潔一點。
int a = 10; x = x+10; x += 10;
-
單目操作符
! + -
&(取地址)
sizeof(以位元組為單位)
~(對於一個數的二進位制按位取反)
前置和後置-- ++
*(解引用)
(型別) 強制型別轉換
-
關係操作符
-
邏輯操作符
-
條件操作符
-
下標引用、函式呼叫、結構成員