關於位運算

2021-06-23 07:01:55 字數 1176 閱讀 5660

今天看k神的一篇題解, 看到一些關於位運算的技巧。 又想起以前學長川哥給的一篇位運算對集合處理的技巧的pdf。 所以就一起整理一下。

各種位運算子的功能就不累述了。 

集合的位運算表示(來自川哥給的pdf)

基本表示

1.空集 0

2.全集(1<3.只含有第 i 個元素的集合1<

集合間的操作

1.s 與 t 的並集 s|t

2.s 與 t 的交集 s&t

3.從 s 中刪除其子集 t s^=t

集合與元素的操作

1.判斷 s 中是否有第 i 個元素if(s&(1<>i)&1)

2.向 s 中新增第 i 個元素 (將 s 的第 i 位,置為 1)s|=(1<3.從 s 中刪除第 i 個元素(即使不存在)(將 s 的第 i 位,置為 0)s&=(~(1<

集合列舉

1.列舉全集的所有子集for(int s=0;s<(1<2.列舉集合 s 的所有非空子集for(int t=s;t;t=(t-1)&s)

3.列舉含有 k 個元素的所有集合

int comb = (1<< k) – 1

while ( comb< ( 1<> 1) | y;

}

特別的:

位運算的優先順序特別低,比比較符號還要低!比如 s&t == 1 的實際意義是 s &(t==1)而不是(s&t)==1 所以遇到位運算的相關操作,最好加上括號.

位運算對數字的處理(來自k神部落格)

k神部落格:

將s中二進位制第k位變成0的處理方式:

s = s & (~(1 << pos));

將s中二進位制第k位變成1的處理方式:

s = s | (1 << pos);

快速判斷奇偶性:

if(a & 1)//a為奇數

if(!(a & 1))//a為偶數

交換2個值不運用臨時變數:

a = a ^ b;  

b = b ^ a;

a = a ^ b;

關於位運算

9月21日,對本文從格式到部分內容上都進行了修改 今天看了一位師兄去年的筆經總結,其中有一題是 不許用 和 來實現求任意數除以3的餘數 我想考官的目的應該是想考察學生對位運算的熟悉程度吧,於是我把題目擴充套件成 只能用 和位運算實現正整數除法 和取模 注意 這裡不能使用其它的庫例程來輔助計算,如lo...

關於 位運算

位運算 位運算是把數字用二進位制表示之後,對每一位上0或者1的運算。理解位運算的第一步是理解二進位制。二進位制是指數字的每一位都是0或者1.比如十進位制的2轉化為二進位制之後就是10。在程式設計師的圈子裡有乙個流傳了很久的笑話,說世界上有10種人,一種人知道二進位制,而另一種人不知道二進位制。其實二...

關於位運算

主要 1.如果兩個相應的二進位制位都為 則該位的結果值為1 否則為0。是二進位制 與 運算,參加運算的兩個數的二進位制按位進行運算,運算的規律是 0 0 0 0 1 0 1 0 0 1 1 1 對於參加運算的數要換算為二進位制進行運算,例如3 2的結果是2,過程如下 3 2 0111 0010 00...