位操作用途特徵與技巧

2021-06-20 06:28:57 字數 1062 閱讀 8147

位操作在計算機中是一種非常高效的運算。其基本操作為:

基本操作

與 ,或,非,異或(兩數的對應位:同為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 ...