位操作在計算機中是一種非常高效的運算。其基本操作為:
基本操作
與 ,或,非,異或(兩數的對應位:同為0,異為1。如:0110 ^1100 = 1010)
先說說用途吧。
一、用途
1、沒想到的交換操作(不引入任何變數)
交換操作除了可以用 f(&a, &b)實現外,如果要求不能引入任何新的變數。則可用異或操作:
a的二進位制為 13=8+4+1=1101(二進位制)
b的二進位制為 6=4+2=110(二進位制)
第一步 a^=b a = 1101 ^ 110 = 1011;
第二步 b^=a b = 110 ^ 1011 = 1101;即b=13
第三步 a^=b a = 1011 ^ 1101 = 110;即a=6
其背後原理是:a=a^b; b=a^b=(a^b)^b; //b變成a了; a=a^b=(a^b)(a^b)^b //a變成b了
異或操作滿足交換律;
任何數和它自身異或結果為0,而任何數和0進行異或,結果為其自身。所以,b=(a^b)^b=a^(b^b)=a
任何數與-1即oxffffffff異或相當於取反
2、搜尋引擎
3、大資料變小
bitset資料結構常用來處理大資料問題,也就是說把大資料變小。詳見:bloomfilter演算法的內容。
二、特徵
1、乙個數b除以2(等價於該數的二進位制右移1位),餘數為1,表示移位前的最後一位是1;如果求二進位制的01個數就可以利用此特徵。餘數為1的判定,可利用下列操作:b &ox01,結果必為0或1
2、乙個數a和a-1進行與操作,其結果是最後一位為1的位,被置為0了。 例如:a=1101; a-1=1100; 則: a&(a-1)=1100,所以,如果求乙個數的二進位制有多少個1時,可用此方法,迴圈操作,迴圈次數為1的個數,即可很快得到答案。不需要一位一位判定。詳見:程式設計之美的「求二進位制數中1的個數」
3、morewindows總結地相當全面:
BIT位操作用途
bit的思路是很自然而且緊湊的。1.如果業務數固定,比如少於32項業務,那麼乙個32位的整型值足以表達 定義列舉型別 enum business 則可進行如下的組操作 business businessgroup business 1 business 6 business 23 建立乙個業務組,包...
位操作技巧
檢測乙個無符號數是不為2 n 1 為冪 x x 1 將最右側0位改為1位 x x 1 二進位制補碼運算公式 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 ...
位操作技巧
檢測乙個無符號數是不為2 n 1 為冪 x x 1 將最右側0位改為1位 x x 1 二進位制補碼運算公式 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 ...