C 位運算總結

2021-07-24 10:36:29 字數 1373 閱讀 2406

位運算應用口訣

清零取反要用與,某位置一可用或

若要取反和交換,輕輕鬆鬆用異或

移位運算

要點 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<

C 位運算總結

位運算的運算物件只能是整型或者字元型資料。c 的位運算子 c 中的移位運算 移位運算是指將二進位制資訊串作為整體移動。leetcode上位運算的幾道例題 1 位異或運算 異或運算 相同為0,不同為1。將陣列中的所有元素求異或和,對於相同的元素,異或的結果為0。因此,陣列中成對出現的元素異或和為0,所...

C 位運算總結(一)

主要講解c 的位運算和位運算的作用。表示按位與 1 1 1 1 0 0 0 1 0 0 0 0用處 保留某一位,用於判斷對應位資料是否為1。int a 0x00101101 判斷低三位是否為1 if a 0x100 0x100 使用0x0f來與乙個整數進行 運算,來獲取該整數的最低4個bit位。in...

位運算總結

位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...