位運算在C言語中是一種非常富強的東西,它容許開辟者對整數中的單個位停止操縱。這種操縱不只可能優化順序機能,還能實現一些高等的功能。本文將深刻探究C言語中的位運算技能,幫助讀者控制這一富強的東西。
位運算概述
位運算是對二進位數停止操縱的運算,它包含按位與(&)、按位或(|)、按位異或(^)、按位取反(~)、左移(<<)跟右移(>>)六種操縱。
1. 按位與(&)
按位與運算符「&」是比較兩個數的響應位,假如兩個位都為1,則成果為1,不然為0。
int a = 9; // 二進位:0000 0000 0000 0000 0000 0000 0000 1001
int b = 5; // 二進位:0000 0000 0000 0000 0000 0000 0000 0101
int c = a & b; // 二進位:0000 0000 0000 0000 0000 0000 0000 0001 (成果為1)
2. 按位或(|)
按位或運算符「|」是假如兩個數的響應位至少有一個為1,則成果為1,不然為0。
int a = 9; // 二進位:0000 0000 0000 0000 0000 0000 0000 1001
int b = 5; // 二進位:0000 0000 0000 0000 0000 0000 0000 0101
int c = a | b; // 二進位:0000 0000 0000 0000 0000 0000 0000 1110 (成果為14)
3. 按位異或(^)
按位異或運算符「^」是假如兩個數的響應位差別,則成果為1,不然為0。
int a = 9; // 二進位:0000 0000 0000 0000 0000 0000 0000 1001
int b = 5; // 二進位:0000 0000 0000 0000 0000 0000 0000 0101
int c = a ^ b; // 二進位:0000 0000 0000 0000 0000 0000 0000 1110 (成果為14)
4. 按位取反(~)
按位取反運算符「~」是對數的全部位取反,即0變1,1變0。
int a = 9; // 二進位:0000 0000 0000 0000 0000 0000 0000 1001
int c = ~a; // 二進位:1111 1111 1111 1111 1111 1111 1111 0110 (成果為-10)
5. 左移(<<)
左移運算符「<<」是將數的全部位向左挪動指定的位數,左邊補0。
int a = 9; // 二進位:0000 0000 0000 0000 0000 0000 0000 1001
int c = a << 2; // 二進位:0000 0000 0000 0000 0000 0000 0010 1000 (成果為36)
6. 右移(>>)
右移運算符「>>」是將數的全部位向右挪動指定的位數,左邊補0(邏輯右移)或保存最高位(算術右移)。
int a = 9; // 二進位:0000 0000 0000 0000 0000 0000 0000 1001
int c = a >> 2; // 二進位:0000 0000 0000 0000 0000 0000 0000 0011 (成果為3)
位運算技能
1. 斷定奇偶數
可能利用按位與運算符來斷定一個數是奇數還是偶數。
int num = 5;
if (num & 1) {
printf("奇數\n");
} else {
printf("偶數\n");
}
2. 交換兩個數
可能利用異或運算符來交換兩個數,而不須要利用常設變數。
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d, b = %d\n", a, b); // 輸出:a = 20, b = 10
3. 清除跟設置位
可能利用按位與跟按位或運算符來清除或設置特定的位。
int a = 10; // 二進位:0000 0000 0000 0000 0000 0000 0000 1010
int b = 0xFF; // 二進位:1111 1111 1111 1111 1111 1111 1111 1111
// 清除第3位
a = a & ~b;
// 設置第3位
a = a | b;
總結
位運算在C言語中是一種富強的東西,它可能幫助開辟者實現高效的位操縱。經由過程控制位運算技能,可能優化順序機能並實現一些高等功能。盼望本文能幫助讀者更好地懂得跟利用位運算。