集合的整數表示
當集合中的元素較少時,我們可以通過二進位製碼來表示集合,這樣列舉子集什麼的就更加方便快捷嗎,有多快可以從下面的**看出
空集 0
只含有第i個元素的集合 1《含有全部n個元素的集合 (1《判斷第i個元素是否屬於集合s if(s>>i &1)
向集合中加入第i個元素 s|(1《從集合中去除第i個元素 s&~(1《集合s和t的並集 s|t
集合s和t的交集 s&t
列舉某個集合sup=01101101的集合
暴力列舉顯然太二,考慮(sub+1)&sup但是這樣sub並不一定會增加
所以考慮降序的(sub-1)&sup,這樣能一直減下去
int sub=sup;
dowhile(sub!=sup)//處理完0後,會有sub=-1,-1&sup=sup
再來說從的集合中列舉大小為k的子集
最小的子集為(1《上面的**意思就是,例如有0101110;
我們把連續的後面的111最高位往前進一位,其餘的右移,下乙個結果是0110011
位運算學習筆記
1.補碼 補碼是為了表示乙個負數的二進位制形式。其轉化方式是,先將負數當成正數,轉化成二進位制的形式,再將二進位制正數的各個位上取反,再加上 例如 5先求出5的二進位制數 0000 0000 0101 然後將各個位上0變1 1變0 1111 1111 1010 最後再加1 1111 1111 101...
位運算學習筆記
要明白位運算是在二進位制中的運算方式,所有其他進製的數在進行位運算時都要先轉化成二進位制數再進行運算。int 是 32位二進位制。有符號整型 正數 0 負數 1 1 00000.0001 1 10000.00011.按位與 只有當x,y都是1的時候,運算結果才是1,其餘情況都是0.1 1 1 1 0...
位運算學習筆記
1 二進位制最高位是符號位 0代表正數,1代表負數 2 正數的原碼 反碼 補碼都相同 3 負數的反碼是將原碼符號位不變,其他位取反。4 負數的補碼是將反碼 1 5 0的原碼 補碼都是0 6 計算機中是依據補碼進行計算的。7 練習 1 2 例題說明 對2按位取反。由於2為正數,正數的原碼 補碼相等。所...