//把右起第乙個0變成1 | (100101111->100111111) | x or (x+1)
//把右邊連續的0變成1 | (11011000->11011111) | x or (x-1)
//取右邊連續的1 | (100101111->1111) | (x xor (x+1)) shr 1
//取右起的第乙個1 | (100101000->1000) | x and (-x)
#include #include #include /*a:x &= x-1;*/
//usage1:
bool is_pow2(int x) //判斷x是否2的n次方,x>0,x=1,2,4,……8 return 1;
//usage2:
int count1(int x)//計算數number的二進位制中包含1的個數,x>0
return co;
}//usage3:
void enumerate_subset(int x) //x>=0
while (y!=x); //處理完0後,會有-1&x=x;
}/* */
/*b:列舉x的所有大小為k的子集*/
void enumerate_subset_ofsize_k(int k,int n)
}/*c:列舉不含相鄰元素的集合*/
void enumerate_subset_of_noconsecutive(int n)
}
位運算應用
位運算 針對整型 字元型,計算機會將它轉換為二進位制運算 1 按位與 x y 對應位都為1時才為1 用途 取 保留1個數的某位 對應掩碼的對應位為1 其餘各位置1 2 按位或 x y 對應位都為0才為0,否則為1 用途 將1個數的某些位置1,其餘不變 3 按位異或 x y 對應位相同為0,不同為1 ...
位運算應用
1.判斷乙個數的奇偶性。x 1 101 1 1 2.判斷x是否是2的正整數冪。x x 1 100 011 0 3.取出乙個數的某些二進位制位。3.1.x 1 d 1 10101 1 3 1 00100 取第d位 3.2.x 1 d 1 10101 1 3 1 00101 取最後d位,x對2 d取模 ...
位運算應用
位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...