作用
在小記憶體時代,經常把一個位元組分成好幾份來用,以達到節約記憶體的目的。
現在經常用于網絡資料傳輸,單片機領域……。
注意:
※在進行任何位運算前,首先應将進任何表達式的結果轉換成二進制,算完以後再轉回原來的進制即可得到結果。
※不能對浮點數進行位運算。
按位與
格式:二進制&二進制
如:
int a=3&5;
記憶方法:在邏輯與運算中,兩邊的表達式都為真,結果才為真。是以按位與運算時,兩個位都為1,結果才為1。
作用:
※清零:要将某一位清零,可将相應的位設定為0,其它位為1,再使用&運算。
※取指定位:想取某一位,可将相應的位設定為1,其它位為0,再使用&運算。
按位或
格式:二進制|二進制
int a=3|5;
記憶方法:在邏輯或運算中,兩邊的表達式有一個為真,結果就為真。是以按位或運算時,有一個位為1,結果就為1。
作用:
※将某位置1:要将某一位置1,可将相應的位設定為1,再使用 | 運算
按位異或
格式:二進制^二進制
int a=3^5;
記憶方法:“異”就是不同的意思,異或實際上是判斷兩數是否“不同”,如果不同就為真。是以按位異或時,兩數不同,結果為1。
定理:
1、任何數與自己異或都為0
2、任何數與0異或值不改變
※翻轉位:要将某一位翻轉,可将相應的位置1,第一次用 ^ 運算,可将其翻轉,第二次用 ^ 運算,又可将其轉回來。早期的滑鼠指針用的就是一種圖形異或運算,是以速度非常快。
※不用臨時變量交換兩個值。如a=4,b=5,可用以下語句實作互換:
a=a^b;
b=b^a;
用等量代換法分析:a=a^b,那麼b=b^a相當于b=b^(a^b),去括号得b=b^a^b,移項得b=b^b^a,根據定理1得b=0^a,根據定理2得b=a。
這時候b的值是4,而a隻是個中間值。
a=a^b相當于a=(a^b)^(b^a^b),去括号得a=a^b^b^a^b,移項得a=a^a^b^b^b,根據定理1得a=0^0^b,根據定理2得a=b。
這時候a的值是5,交換完畢
程式1
矩陣異或
按位取反
格式:~二進制
如:int a=~3;
得到11111100,它是個負數。
左移
格式:二進制<<要移動的位數
如:
int a=3<<2;
相當于00000011<<2得到00001100
轉成十進制後,a的值為12
作用:将二進制數左移一定的位數,最右邊補0。任何一位移出左邊界,自動丢棄。
※不越界的左移相當于讓變量值乘以2。
右移
格式:二進制>>要移動的位數
int a=12>>2;
相當于00001100>>2得到00000011
轉成十進制後,a的值為3
作用:将二進制數右移一定的位數,最左邊補0(或1)。任何一位移出右邊界,自動丢棄。
※不越界右移相當于讓變量值除以2。
注意:右移比左移要複雜些,如果要移的數為負數,最左邊符号位為1,為了不改變此數的符号位,往右移的時候,左邊會自動補1。
位運算的優先級:~ 高于 << >> 高于 & 高于^ 高于 |