曾令我迷茫的位運算

2021-08-22 04:36:02 字數 1645 閱讀 6432

位運算簡介及實用技巧-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 ...