位運算基礎與技巧

2022-01-09 22:03:13 字數 1190 閱讀 7471

標誌

↓=意義

a & b

按位與`a

b`a ^ b

按位異或

~x

按位取反

! a

非運算a >> x

右移運算

a << x

左移運算

操作表示

將 \(x\) 第 \(i\) 位取反

x ^= (1 << i)

將 \(x\) 第 \(i\) 位製成 1

` x將 \(x\) 第 \(i\) 位製成 \(0\)

x &= -1 ^ (1 << i)x &= ~(1 << i)

取 \(x\) 對 \(2\) 取模的結果

x & 1

取 \(x\) 的第 \(i\) 位是否為

x & (1 << i)(x >> i) & 1

取 \(x\) 的最後一位

x & -x

取 \(x\) 的絕對值

(x ^ (x >> 31) ) - (x >> 31)(int 型)

判斷 \(x\) 是否不為 \(2\) 的整次方冪

x & (x - 1)

判斷 \(a\) 是否不等於 \(b\)

a != ba - ba ^ b

判斷 x 是否不等於 −1

x != -1x ^ -1x + 1~x

用補碼來表示負數

\(∵−1=0−1\)

\(0=000⋯00\)

\(1=000⋯01\)

\(∴−1=111⋯11\)

同理:\(−2=111⋯110\)

\(−3=111⋯101\)

\(−4=111⋯100\)

\(...\)

於是有-x = ~x + 1

位運算技巧

1.lowbit x 實現 int lowbit int x 這個函式用來求數中二進位制位中最低位的1 完整求法 log2 lowbit x 需要注意的是,答案的範圍是0 30,因為31位是符號位,求出來的值為負數,原因如下 設x 0x8000 0000,那麼設res lowbit x 0x8000...

位運算技巧

數字和1相與 判斷奇偶 x 1 1 奇數 x 1 0 偶數 不用其他空間交換兩值 a a b b a b a a b 或a a b b a b a a b a 0 a a a 0 不用其他空間找陣列中唯一成對的那個數 int b 0 for int i 1 i 10 i int a 10 for i...

位運算技巧

1.或 符號 比較兩個數的每一位,只要有乙個數在這一位上為1,所得的新數在這一位上就為1,否則為0。2.與符號 比較兩個數的每一位,只有兩數這一位同時為1時所得新數為1,否則為0。3.異或 符號 比較兩數的每一位,如果一樣所得新數這一位就是0,不一樣就是1。4.取反 符號 0變1,1變0。5.移位 ...