位運算
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 × 2
e2
,約減的模一大於結果型別可表示的最大值。 否則,如果e1
屬於有符號型別且為非負值,e1 × 2
e2
可由結果型別的相應無符號型別表示,則該值轉換為結果型別後即為得到的值;否則,該行為是不確定的。
e1 >> e2
的值是e1
向右移動e2
位的結果。 如果e1
屬於無符號型別或e1
屬於有符號型別且為非負值,則結果值為e1/2
e2
之商的整數部分。 如果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 則結果才...