細學C 之位運算子

2021-10-07 19:23:30 字數 1705 閱讀 6860

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