清零取位要用與,某位置一可用或
若要取反和交換,輕輕鬆鬆用異或
移位運算
要點 1 它們都是雙目運算子,兩個運算分量都是整形,結果也是整形。
2 「<<」 左移:右邊空出的位上補0,左邊的位將從字頭擠掉,其值相當於乘2。
3 「>>」右移:右邊的位被擠掉。對於左邊移出的空位,如果是正數則空位補0,若為負數,可能補0或補1,這取決於所用的計算機系統。
4 「>>>」運算子,右邊的位被擠掉,對於左邊移出的空位一概補上0。
位運算子的應用 (源運算元s 掩碼mask)
(1) 按位與– &
1 清零特定位 (mask中特定位置0,其它位為1,s=s&mask)
2 取某數中指定位 (mask中特定位置1,其它位為0,s=s&mask)
(2) 按位或– |
常用來將源運算元某些位置1,其它位不變。 (mask中特定位置1,其它位為0 s=s|mask)
(3) 位異或– ^
1 使特定位的值取反 (mask中特定位置1,其它位為0 s=s^mask)
2 不引入第三變數,交換兩個變數的值 (設 a=a1,b=b1)
目 標 操 作 操作後狀態
a=a1^b1 a=a^b a=a1^b1,b=b1
b=a1^b1^b1 b=a^b a=a1^b1,b=a1
a=b1^a1^a1 a=a^b a=b1,b=a1
二進位制補碼運算公式:
-x = ~x + 1 = ~(x-1)
~x = -x-1
-(~x) = x+1
~(-x) = x-1
x+y = x - ~y - 1 = (x|y)+(x&y)
x-y = x + ~y + 1 = (x|~y)-(~x&y)
x^y = (x|y)-(x&y)
x|y = (x&~y)+y
x&y = (~x|y)-~x
x==y: ~(x-y|y-x)
x!=y: x-y|y-x
x< y: (x-y)^((x^y)&((x-y)^x))
x<=y: (x|~y)&((x^y)|~(y-x))
x< y: (~x&y)|((~x|y)&(x-y))//無符號x,y比較
x<=y: (~x|y)&((x^y)|~(y-x))//無符號x,y比較
應用舉例
(1) 判斷int型變數a是奇數還是偶數
a&1 = 0 偶數
a&1 = 1 奇數
(2) 取int型變數a的第k位 (k=0,1,2……sizeof(int)),即a>>k&1
(3) 將int型變數a的第k位清0,即a=a&~(1<
位運算應用
位運算 針對整型 字元型,計算機會將它轉換為二進位制運算 1 按位與 x y 對應位都為1時才為1 用途 取 保留1個數的某位 對應掩碼的對應位為1 其餘各位置1 2 按位或 x y 對應位都為0才為0,否則為1 用途 將1個數的某些位置1,其餘不變 3 按位異或 x y 對應位相同為0,不同為1 ...
位運算應用
1.判斷乙個數的奇偶性。x 1 101 1 1 2.判斷x是否是2的正整數冪。x x 1 100 011 0 3.取出乙個數的某些二進位制位。3.1.x 1 d 1 10101 1 3 1 00100 取第d位 3.2.x 1 d 1 10101 1 3 1 00101 取最後d位,x對2 d取模 ...
位運算應用
位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...