細說C (五) C 位運算詳解

2021-08-28 18:47:58 字數 1394 閱讀 1869

位運算

c++位運算子(滿足左結合律)

位運算子作用於整數物件,並將位運算物件看作二進位制集合

一般來說,若運算物件位「小整型」,則其值會被自動提公升

運算物件可以為有符號型或無符號型

(有符號型;具體如何處理取決於機器,並且左移可能會改變符號位,因此屬於未定義行為,不推薦使用)

優先順序算術運算子 > 移位運算子 > 關係運算子  賦值運算子  條件運算子

移位運算子

左移<<

shift-expression << additive-expression

左移運算子將導致shift-expression中的位向左移動additive-expression所指定的位數。 因移位運算而空出的位上將用零填充。 左移是邏輯移動(從末端移掉的位將被捨棄,包括符號位)。

右移》shift-expression >> additive-expression 

右移運算子將導致shift-expression中的位模式向右移動additive-expression所指定的位數。 對於無符號數字,因移位運算而空出的位上將用零填充。 對於有符號數字,符號位用於填充空出的位。 也就是說,如果數字為正,則使用 0;如果數字為負,則使用 1。 附;

1 以下是 c++ iso 規範 說明

e1 << e2的值是e1向左移動e2位的結果,空出的位用零填充。 如果e1屬於無符號型別,則結果的值為e1 × 2e2

,約減的模一大於結果型別可表示的最大值。 否則,如果e1屬於有符號型別且為非負值,e1 × 2e2

可由結果型別的相應無符號型別表示,則該值轉換為結果型別後即為得到的值;否則,該行為是不確定的。

e1 >> e2的值是e1向右移動e2位的結果。 如果e1屬於無符號型別或e1屬於有符號型別且為非負值,則結果值為e1/2e2

之商的整數部分。 如果e1屬於有符號型別且為負值,則結果值由實現決定。

位與,或,非運算子

在兩個運算物件上逐位執行相應的操作

與&b1&b2

或|b1|b2 

非^ b1^b2

位求反運算子~

~bits   1變為0,0變為1

(char型別提公升為int型別,提公升後原位保持不變,往高位增加0)

c++primer 

C 位運算詳解

以前收藏過一篇講c 位操作的文章,這次部落格搬家,以前的資料都沒有保留,整理谷歌 管理後台的時候,發現不時的還有有在查詢這篇文章。所以,瘋刀也來弄個簡單的教程,講講位操作的用途和魅力吧。位是資料儲存的最小單位。在 計算機中的二進位制數系統中,位,簡記為b,也稱為位元,每個0或1就是乙個位 bit 我...

C 位運算詳解

位是資料儲存的最小單位。在 計算機中的二進位制數系統中,位,簡記為b,也稱為位元,每個0或1就是乙個位 bit 我們先來看看位運算操作符 按位與 按位或 按位異或 按位取反 按位右移 按位左移 1 按位與 從概念上來講,就是將參與運算的兩個分量對應的每一位來做邏輯與運算,若兩者都為真 等於1 則結果...

C 位運算詳解

位是資料儲存的最小單位。在計算機中的二進位制數系統中,位,簡記為b,也稱為位元,每個0或1就是乙個位 bit 我們先來看看位運算操作符 按位與 按位或 按位異或 按位取反 按位右移 按位左移 1 按位與 從概念上來講,就是將參與運算的兩個分量對應的每一位來做邏輯與運算,若兩者都為真 等於1 則結果才...