程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的。位運算就是直接對整數在記憶體中的二進位制位進行操作。
含義c語言
操作按位與
a & b
如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0
按位或a | b
兩個相應的二進位制位中只要有乙個為1,該位的結果值為1
按位異或
a ^ b
若參加運算的兩個二進位制位值相同則為0,否則為1
按位取反
~a~是一元運算子,用來對乙個二進位制數按位取反,即將0變1,將1
左移a << b
用來將乙個數的各二進位制位全部左移n位,右補0
帶符號右移
a >> b
將乙個數的各二進位制位右移n位,移到右端的低位被捨棄,對於無符號數, 高位補0
一 :判斷奇偶
x&1 = 0 偶數
x&1 = 1 奇數
二:消去最後一位1
x & (x-1)
三:取第k位
x >> k & 1
四:將第k位清零(此時右邊第一位序號是0)
x = x & ~(1 << k) //右邊第一位序號為0時
x = x & ~(1 << k - 1) //右邊第一位序號為1時
五: 求兩個整數平均值
(x&y)+((x^y)>>1)
六: 判斷是否是2的冪
(x&(x-1))
等於0 是
七:交換兩個整數
void swap(int x , int y)
八:計算絕對值
(x^y)-y
//(x+y)^y
九:轉換成位運算
a % (2^n) 等價於 a & (2^n - 1)
a * (2^n) 等價於 a<< n
a / (2^n) 等價於 a>> n
a % 2 等價於 a & 1
x = x == a ? b : a等價於 x= a ^ b ^ x
x 的 相反數 表示為 (~x+1)
十:列舉子集
思路就是使用乙個正整數二進位制表示的第i位是1還是0,代表集合的第i個數取或者不取。所以從0到2^n-1總共2^n個整數,正好對應集合的2^n個子集。
位運算及簡單應用
老實說,我對 一些比較簡單的運算子比較熟悉。對位運算就陌生了,主要用的少。我覺得高手用的會比較多,因為位運算速度比較快。1.如果兩個相應的二進位制位都為 則該位的結果值為1 否則為0。注 下面都用8位的 unsigned char 來做例子。11 3 3 00001011 00000011 0000...
位運算及應用
位運算 與 或 非 異或 左移,相當與 2 右移,正數高位補0,負數由計算機決定 右移,正數高位補0,負數亦補0 迴圈左移k次 x 32 k 迴圈右移k次 x k x 32 k 清零取反要用與,某位置一可用或 若要取反和交換,輕輕鬆鬆用異或 應用 字元改變大小寫 原理 小寫字元比對應的大寫字元在數值...
位運算應用
位運算 針對整型 字元型,計算機會將它轉換為二進位制運算 1 按位與 x y 對應位都為1時才為1 用途 取 保留1個數的某位 對應掩碼的對應位為1 其餘各位置1 2 按位或 x y 對應位都為0才為0,否則為1 用途 將1個數的某些位置1,其餘不變 3 按位異或 x y 對應位相同為0,不同為1 ...