位運算簡介及實用技巧-matrix67原創
and
and 1:取二進位制的最末位,可用於判斷奇偶性
or or 1(/0):二進位制最末位強行變成1(/0)
xor
0和1 xor 0都不變, xor 1則取反
逆運算:(a xor b) xor b = a,用於簡單加密
not
not 無符號整數:與該型別上界的差
not 有符號整數:not a ==> -a-1
shl 左移
a shl b ==> a*2^b
shr 右移
a shl b ==> a/2^b 功能
示例位運算
去掉最後一位
(101101->10110)
x shr 1
在最後加乙個0
(101101->1011010)
x shl 1
在最後加乙個1
(101101->1011011)
x shl 1+1
把最後一位變成1
(101100->101101)
x or 1
把最後一位變成0
(101101->101100)
x or 1-1
最後一位取反
(101101->101100)
x xor 1
把右數第k位變成1
(101001->101101,k=3)
x or (1 shl (k-1))
把右數第k位變成0
(101101->101001,k=3)
x and not (1 shl (k-1))
右數第k位取反
(101001->101101,k=3)
x xor (1 shl (k-1))
取末三位
(1101101->101)
x and 7
取末k位
(1101101->1101,k=5)
x and (1 shl k-1)
取右數第k位
(1101101->1,k=4)
x shr (k-1) and 1
把末k位變成1
(101001->101111,k=4)
x or (1 shl k-1)
末k位取反
(101001->100110,k=4)
x xor (1 shl k-1)
把右邊連續的1變成0
(100101111->100100000)
x and (x+1)
把右起第乙個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 xor (x-1))
#和@互為逆運算,下面**swap兩個值
x = x # y
y = x @ y
x = x @ y
位運算 57 普通的位運算
要求說明 當 a 2,b 4,c 6,d 8時程式設計求a c b d a d a的值。解 單目運算子 都是對對應整數轉化成二進位制數後按位比較計算 兩個相應二進位中,都為1,該位為1,否則為0 兩個相應二進位中,有乙個1,該位為1,否則為0 兩個相應二進位,相同為0,不同為1 單目運算子,作用對二...
標誌位的位運算應用
今天設計新版標誌位,老郭提出了乙個新的方案。以往都是乙個字段設定乙個狀態,tinyint型別,0或者1,但是這樣的壞處是如果乙個資訊表有很多狀態,需要增加很多的字段,空間利用不好,所以他提出用二進位制位運算來解決標示位的問題。設定標示位字段位tinyint型別,也就是最大128,換成二進位制就是有8...
位運算的認識與運算
1 與運算 其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1,否則為0。參與運算的數以補碼方式出現。正數的補碼是其本身 例 9 5 9的二進位制位為0000 1001 5的二進位制位為0000 0101 結果為0000 0001,轉化為十進位制就為1 所以9 5 ...