位運算子詳細介紹及各種使用技巧

2021-10-04 12:03:50 字數 2624 閱讀 6293

位運算子作用於位,並逐位執行操作。&、 | 和 ^ 的真值表如下所示:

假設如果 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...