位運算基礎及簡單應用

2021-09-05 09:00:51 字數 1647 閱讀 1434

程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的。位運算就是直接對整數在記憶體中的二進位制位進行操作。

含義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 ...