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 ...