輕鬆掌握操作符,常用操作符的應用分析
技術標籤:C語言
這篇部落格主要是對C語言中的一些操作符進行講解和其應用的分析。
目錄
移位操作符
移位操作符有2種:
左移操作符 <<
右移操作符 >>
提示:移位操作符,移的是二進位制位,即對補碼進行移動操作。
應用分析:
左移操作符的移動規則:
左邊拋棄,右邊補0
右移操作符的移動規則:
右移運算有2種,①邏輯移位 ②算術移位
①邏輯移位:右邊拋棄,左邊補0
②算術移位:右邊拋棄,左邊補符號位
位操作符
按位與 &
按位或 |
按位異或 ^
提示:位操作符的運算元必須是整數
應用分析:
按位與 &
全1為1,有0則0。(2個數同時為1的位才為1,一旦有1個是0則是0)
按位或 |
有1為1,全0才為0。(2個數只要有1個是1則為1,同時為0才為0)
按位異或 ^
相同為0,相異為1.(2個數相同為0,不同為1)
例:求一個整數在記憶體中的二進位制中的1的個數
int main() { int num = -1; int count = 0; int i = 0; for (i = 0;i < 32;i++) { if ((num >> i) & 1) count++; } printf("%d\n", count); return 0; }
實際上這裡有種更簡單的方法,可以大大提高效率
(每次與自己-1進行按位與操作,這樣有幾個1就進行幾次運算)
int main() { int num = -1; int count = 0; while (num) { num = num & (num - 1); count++; } printf("%d\n", count); return 0; }
邏輯操作符
邏輯與 &&
邏輯或 ||
邏輯非 !
提示:邏輯操作符,只關注“真”和“假”。
應用分析:
我們先來看一道題
int main() { int a = 0; int b = 1; int c = 2; int d = 3; int i = a++ && b++ && ++c && d++; printf("i=%d a=%d b=%d c=%d d=%d", i, a, b, c, d); return 0; }
這道題的結果是:i = 0, a = 1, b = 1, c= 2, d = 3。
對於邏輯與這個操作符,只要前面有一個條件為假,那麼將不進行後面的運算。
對於邏輯或則是同理,只要前面有一個條件是真,那麼將不進行後面的運算。
逗號表示式
exp1, exp2, exp3, ...expN
提示:逗號表示式的結果,是最後一個表示式的結果。該表示式是從左向右依次執行。
應用分析:
int a = 1;
int b = 2;
int c = ( a = a+b, a++, a<b, b);
c的值是什麼?
c的值是 2,即c的值等於b,也就是該逗號表示式中的最後一個表示式的結果
條件操作符
exp1 ? exp2 : exp3
應用分析:
求2個數的較大值
int main() { int a = 10; int b = 20; int Max = (a > b) ? (a) : (b); printf("%d\n", Max); return 0; }
關於表示式求值的順序
1. 操作符的優先順序
2. 操作符的結合性
3. 操作符是否控制求值順序
(2個相鄰的操作符,先比較他們的優先順序高低,如果優先順序相同,那麼在比較他們的結合性)