位運算子作用於位,並逐位執行操作。&、 | 和 ^ 的真值表如下所示:
假設如果 a = 60,且 b = 13,現在以二進位制格式表示,它們如下所示:
a = 0011 1100
b = 0000 1101
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
下表顯示了 c 語言支援的位運算子。假設變數 a 的值為 60,變數 b 的值為 13,則:
看一段**,切實理解各項位運算子:
#include
intmain()
執行的結果如下:
line 1
- c 的值是 12
line 2
- c 的值是 61
line 3
- c 的值是 49
line 4
- c 的值是 -
61line 5
- c 的值是 240
line 6
- c 的值是 15
unsigned
int a=60;
//0011 1100
unsigned
int b=13;
//0000 1101
a=a^b;
//a=a^b=0011 0001
b=a^b;
//b=a^b=0011 1100 相當於b1=(a^b)^b
a=a^b;
//a=a^b=0000 1101 相當於a1=(a^b)^((a^b)^b)
例項:
#include
intmain()
執行結果:
a=
60,b=
13;a=
13,b=
60;
二進位制數的位權是以2為底的冪,如果乙個整數 m 是 2 的 n 次冪,那麼轉換為二進位制之後只有最高位為 1,其餘位置為 0,再觀察 m-1 轉換為二進位制後的形式以及 m&(m-1) 的結果,例如:
2
-->
0000
00101--
>
0000
00012&
1-->
0000
0010
&0000
0001=0
4-->
0000
01003--
>
0000
00114&
3-->
0000
0100
&0000
0011=0
8-->
0000
10007--
>
0000
01118&
7-->
0000
1000
&0000
0111
=0
可以看出所有的 1 完美的錯過了,根據位與的特點可知 m&(m-1) 的結果為 0。
如果整數 m 不是 2 的 n 次冪,結果會怎樣呢?例如 m=9 時:
9
-->
0000
10018--
>
0000
10009&
8-->
0000
1001
&0000
1000
!=0
利用這一特點,即可判斷乙個整數是否是2的整數次冪。
示例:
int
func
(int num)
返回值為 1,則輸入的正整數為 2 的整數次冪,返回值為 0 則不是。
如果兩個不同長度的資料進行位運算時,系統會將二者按右端對齊,然後進行位運算。
以「與」運算為例說明如下:我們知道在 c 語言中 long 型佔 4 個位元組,int 型佔 2 個位元組,如果乙個 long 型資料與乙個 int 型資料進行「與」運算,右端對齊後,左邊不足的位依下面三種情況補足:
(1)如果整型資料為正數,左邊補 16 個 0。
(2)如果整型資料為負數,左邊補 16 個 1。
(3)如果整形資料為無符號數,左邊也補 16 個 0。
如:long a=123;int b=1; 計算 a & b。
如:long a=123;int b=-1; 計算 a & b。
如:long a=123; unsigned int b=1; 計算 a & b。
python位運算子詳細介紹
a 60b 13 10進製轉換成二進位制字串 a bin bin a replace 0b b bin bin b replace 0b print a bin 00111100 print b bin 00001101 按位與運算子 參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為...
位運算子的介紹
前面的各種運算都是以位元組為最基本存貯單元進行操作的。但在很多系統程式中常常要求再位遺跡進行運算或者處理。c語言提供了6種位運算子 按位進行與運算 按位進行或運算 按位進行異或運算 按位進行取反運算 按位進行左移 按位進行右移 注意只有 是單目運算子 只需乙個運算元 其他的都是雙目運算子 需要2個運...
按位運算子 位欄位介紹
左移,每左移一位相當於對原數 2 右移,每右移一位相當於對原數 2 注 若結果為小數,則只保留整數部分,例如對5右移一位,結果為2。2 位欄位 位欄位可以節省記憶體空間,提高執行效率,是乙個很有用的程式設計方法 其實也是乙個結構體,如下 1 struct byte2 910struct byte b...