標誌
↓=意義
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 != b
,a - b
,a ^ b
判斷 x 是否不等於 −1
x != -1
,x ^ -1
,x + 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.移位 ...