c++運算子包括算數運算子、關係運算子、邏輯運算子、賦值運算子和位運算子等,其中位運算子是我們比較少用到的(至少我是),但它在c++語言中是必不可少的,這篇文章就來介紹一下c++中的位運算子
位運算子包括位邏輯運算子和移位運算子,顧名思義,位運算子作用於位,並逐位執行操作
位邏輯運算子:
& (位 『與』)
^ (位 『異或』)
| (位 『或』)
~ (為 『取反』)
移位運算子:(箭頭指向哪邊就是哪邊移)
<< (左移)
>> (右移)
示例:假定變數a為10,變數b為20,將a,b化為二進位制分別為01010,10100,因為運算時前面的許多0是a,b位運算後都是0,故為方便已省略,每個**的解釋後面的雙等號箭頭是直接執行的結果
下面逐一演示各個運算子的作用:
邏輯『與』操作
計算原則:有0得0
cout<<
(a&b)
<
//01010 & 10100 = 00000 ==>0(最終結果)
詳細運算:
位運算子通過使用該表示式的二進位制形式一一對齊來進行運算
邏輯『或』操作
計算原則:有1得1
cout<<
(a|b)
<
//01010 | 10100 = 11110 ==>30
計算過程與上面類似,故以下不做**
邏輯『異或』操作
計算原則:相同得0,不相得1
cout<<
(a^b)
<
//01010
邏輯『取反』操作計算原則:與上面的不同,作用於乙個表示式,1變為0,而0變為1,這裡只對單個表示式a或b進行運算,所以補全前面的0
cout<<
(~a)
<
//~0000000000001010 = 1111111111110101 ==>-11
至於上面的-11是怎麼來的這裡這裡先不做解釋,下篇文章介紹補碼你就會理解
左移位操作
計算原則(預設移一位):數值向左移動一位(即去除最左邊一位),並在最右邊新增0
可以試試思考一下下面結論:
cout<<
(a<<2)
<
//001010 << 2 ==>101000 ==>40
右移位操作計算原則(預設移一位):數值向右移動一位(即去除最右邊一位),並在最左邊新增0,與左移類似
cout<<
(a>>2)
<
//01010 >> 2 ==>00010 ==>2
運算子之位運算子
右移 負數 無符號右移 或 異或 與 非 說明 位運算子都是作用在二進位製上的 比如 n 50 n 1 結果是多少?100 n 2 結果是多少?200 n 5 結果是多少?1600 為什麼會是這樣的呢?運算的邏輯如下 1,n 50 2,n的二進位制是 0011 0010 3,0011 0010 左移...
python運算子 之位運算子
支援的資料型別有數字 集合 set 僅支援 交集 並集 不同集 其他型別都不支援位運算。按位運算子是把數字看作二進位制來計算的。位運算子作用於所有的位上,並且按位運算。python中按位運算法則如下 假設a 60,b 13 操作符描述例項 按位與運算子,當且僅當兩個運算元的某一位都非0時,該位的結果...
C 位運算子
c 源自c,在提供高階語言便利的同時,也繼承了c在硬體程式設計方面的功能。因此適用於編寫裝置驅動和嵌入式大 c c 提供位邏輯運算子和移位運算子。二者只能用於整形和字元型。位運算子是對每位進行操作而不影響左右兩位,這有別於常規運算子 是將整個數進行操作的。一 位邏輯運算子 1 按位取反 將1變為0,...