位運算子分析
1.c語言中的位運算子
c語言中的位運算子直接對bit位進行操作,其效率最高。速度快於四則運算和邏輯運算。
2.左移和右移的注意點
-左運算元必須為整數型別
·char和short被隱式轉換為int後進行移位操作
-右運算元的範圍必須為:[0,31];
-左移運算子《將運算數的二進位制位左移
·規則:高位丟棄,低位補0
-右移運算子》把運算數的二進位制位右移
·規則:高位補符號位,低位丟棄
問題1: 0x01 << 2 + 3的值會是什麼?
//位運算子測試
#include int main(void)
執行結果:
注意:位運算子的優先順序是低於四則運算符的
在位運算子,邏輯運算子,數**算符混合的情況下注意事項:
-避免位運算子,邏輯運算子和數**算符同時出現在乙個表示式中
-當位運算子,邏輯運算子和數**算符需要同時參與運算時,盡量使用括號()來表達就算次序。
小技巧:
左移n位相當於乘以2的n次方,但是效率比數**算符高
右移n位相當於除以2的n次方,但是效率比數**算符高
問題2:如何在不引入第三變數的情況下交換兩個變數的資料
#include #define swap(a, b)
int main()
實驗結果:
2.位運算與邏輯運算
位運算與邏輯運算不同處:
-位運算沒有短路規則,每個運算元都參與運算
-位運算的結果為整數,而不是0或者1
-位運算優先順序高於邏輯運算優先順序,低於資料運算優先順序
概念混淆的判斷條件:
#include int main()
printf("i = %d, j = %d, k = %d\n",i,j,k); //if中的判定使用都是位運算子,位運算子每個成員都需要進行計算,不存在短路規則
i = 0;
j = 0;
k = 0;
if( ++i || ++j && ++k )
printf("i = %d, j = %d, k = %d\n",i,j,k); //if中判定使用都是邏輯運算子,存在短路規則
return 0;
}
實驗結果:
總結:·位運算子只能用於整數型別(float型別不適用)
·左移和右移運算子的右運算元範圍必須為[0,31]
·位運算沒有短路規則,所有運算元均會求值
·位運算的效率高於四則運算和邏輯運算
·運算優先順序:四則運算 > 位運算 > 邏輯運算
C語言之位移位運算子和按位運算子
近期做串列埠實驗,遇到將十六進製制轉換成char型字元的問題,程式中用到了位移位運算子和按位或運算子 a.位移位運算子 左移,右移 運算子左邊為移位物件,右邊為要移的位數。移位物件為整數值 若 char a 61,則 a 也可以作為移位物件,若 char a a 則會出錯。總之,你要移的物件一定是乙...
C語言之運算子 (筆記)
下表顯示了 c 語言支援的所有算術運算子。假設變數 a 的值為 10,變數 b 的值為 20,則 運算子描述例項 把兩個運算元相加 a b 將得到 30 從第乙個運算元中減去第二個運算元 a b 將得到 10 把兩個運算元相乘 a b 將得到 200 分子除以分母 b a 將得到 2 取模運算子,整...
C語言位運算子
一.c語言位運算子簡介 c語言的位運算子有六種,分別是 右移運算子 左移運算子 按位與運算子 按位或運算子 按位異或運算子 按位取反運算子 這些運算子都是對於基本資料型別的二進位制位進行操作的,這裡我們只討論整型資料型別的位運算 二.各個運算子的具體使用 右移運算子 將整數的二進位制形式整體向右移動...