C語言之位運算子

2021-08-22 02:25:51 字數 1590 閱讀 6647

位運算子分析

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語言的位運算子有六種,分別是 右移運算子 左移運算子 按位與運算子 按位或運算子 按位異或運算子 按位取反運算子 這些運算子都是對於基本資料型別的二進位制位進行操作的,這裡我們只討論整型資料型別的位運算 二.各個運算子的具體使用 右移運算子 將整數的二進位制形式整體向右移動...