C 位運算子

2021-05-22 00:03:10 字數 2295 閱讀 3887

c++源自c,在提供高階語言便利的同時,也繼承了c在硬體程式設計方面的功能。因此適用於編寫裝置驅動和嵌入式大**。

c++/c 提供位邏輯運算子和移位運算子。二者只能用於整形和字元型。位運算子是對每位進行操作而不影響左右兩位,這有別於常規運算子(&& || !)是將整個數進行操作的。

一.    位邏輯運算子

1.    ~ 按位取反

將1變為0,將0變為1

eg:~(10011010)

(01100101)

注:vc++編譯器,計算~10,得出的結果是-11。為什麼不是5呢

10的二進位制表示為1010,按位取反應該為0101,也就是十進位制的5,為什麼會得出-11?

vc是32位編譯器,所以

10 = 00000000 00000000 00000000   00001010

~10 = 11111111 11111111   11111111   11110101 =   -11

可以通過掩碼(位與) 與15位與

15 = 00000000 00000000 00000000   00001111

~10 = 00000000 00000000 00000000   00000101   =   -11

2.    & 按位取與

只有兩個運算元都是1結果才是1,否則為0

10 = 00000000 00000000 00000000   00001010

12 = 00000000 00000000 00000000   00001100

8 = 00000000 00000000 00000000   00001000

3.    | 按位取或

兩個運算元任意一位為1結果就是1

10 = 00000000 00000000 00000000   00001010

12 = 00000000 00000000 00000000   00001100

14 = 00000000 00000000 00000000   00001110

4.    ^ 按位異或

兩個運算元不同為1,相同為0

10 = 00000000 00000000 00000000   00001010

12 = 00000000 00000000 00000000   00001100

14 = 00000000 00000000 00000000   00000110

5.    用法:掩碼

掩碼是通過&(位與)將某些位設定為開(1),將某些位設定為關(0)。將掩碼0看做不透明,將1看著透明。

eg:如只顯示第

二、三位

107 = 0110 1011

6            = 0000 0110

2   = 0000 0010

6.    用法:開啟位

開啟位是通過 |(位或)開啟乙個值的特定位,同時保持其他位的不變。這是因為和0位或都為0,和1位或都為1。

eg:如只開啟第

二、三位

107 = 0110 1011

6   = 0000 0110

111 = 0110 1111

7.    用法:關閉位

關閉某些位

eg:如關閉第

二、三位

107 = 0110 1011

6    = 0000 0110

105 = 0110 1001

8.    用法:轉置位

如果一位為1則轉置為0,如果一位為1則轉置為0

eg:如轉置第

二、三位

107 = 0110 1011

6    = 0000 0110

105 = 0110 1101

二.    移位運算子

<< 左移

左移運算子是把運算元的值的每一位向左移動,移動的位數有右邊的運算元決定,右側空出的位數用0填充

eg:如轉置第

二、三位

107 = 0110 1011 <<2

172 = 1010 1100

在計算機中由於是32位的

107 = 0000 0000   0000 0000   0000 0000   0110 1011 <<2

428 = 0000 0000   0000 0000   0000 0001   1010 1100

>> 右移

右移運算子是把運算元的值的每一位向右移動,移動的位數有右邊的運算元決定,左邊丟棄的位數用0填充

eg:如轉置第

二、三位

107 = 0110 1011 >>2

26 = 0001 1010

C 位運算子

最近工作專案壓力不大,便繼續開始自學c 發現基礎知識忘記的差不多了.上網搜尋了一些基礎的不能再基礎的東西,溫故知新.c 位運算子 http www.diybl.com course 3 program c cppjs 20090403 163995.html c c 提供位邏輯運算子和移位運算子。二...

C 位運算子

位運算子作用於位,並逐位執行操作。和 的真值表如下所示 pq p qp q p q000 0001 0111 1110 1001 1假設如果 a 60,且 b 13,現在以二進位制格式表示,它們如下所示 a 0011 1100 b 0000 1101 a b 0000 1100 a b 0011 1...

C 位運算子( )

位運算子作用於位,並逐位執行操作。和 的真值表如下所示 pq p q p q p q00 0000 1011 1111 0100 11假設如果 a 60,且 b 13,現在以二進位制格式表示,它們如下所示 a 0011 1100 b 0000 1101 a b 0000 1100 a b 0011 ...