python兩數交換位運算 Python 位運算

2021-10-11 07:32:25 字數 1045 閱讀 2239

利用位運算實現快速計算

通過 <> 快速計算2的倍數問題。

n << 1 -> 計算 n2

n >> 1 -> 計算 n/2,負奇數的運算不可用

n << m -> 計算 n(2^m),即乘以 2 的 m 次方

n >> m -> 計算 n/(2^m),即除以 2 的 m 次方

1 << n -> 2^n

通過 ^ 快速交換兩個整數。 通過 ^ 快速交換兩個整數。

a ^= b

b ^= a

a ^= b

通過 a & (-a) 快速獲取a的最後為 1 位置的整數。

00 00 01 01 -> 5

11 11 10 11 -> -5

00 00 00 01 -> 1

00 00 11 10 -> 14

11 11 00 10 -> -14

00 00 00 10 -> 2

4.利用位運算實現整數集合

乙個數的二進位制表示可以看作是乙個集合(0 表示不在集合中,1 表示在集合中)。鄭州去胎記醫院

比如集合 ,可以表示成 01 00 01 10 10 而對應的位運算也就可以看作是對集合進行的操作。

元素與集合的操作:

a | (1< 把 i 插入到集合中

a & ~(1< 把 i 從集合中刪除

a & (1< 判斷 i 是否屬於該集合(零不屬於,非零屬於)

集合之間的操作:

a 補 -> ~a

a 交 b -> a & b

a 並 b -> a | b

a 差 b -> a & (~b)

注意整數在記憶體中是以補碼的形式存在的,輸出自然也是按照補碼輸出。

python中bin乙個負數(十進位制表示),輸出的是它的原碼的二進位制表示加上個負號,巨坑。

python中的整型是補碼形式儲存的。

python中整型是不限制長度的不會超範圍溢位。

所以為了獲得負數(十進位制表示)的補碼,需要手動將其和十六進製制數0xffffffff進行按位與操作,再交給bin()進行輸出,得到的才是負數的補碼表示

兩個數的交換(位運算)

昨天在重新學習c語言的時候,看到位運算,然後看到乙個有趣的問題,好像以前也看過這個題,就分享一下吧。兩個數的交換,不借助第三個變數空間。先放 include define swap1 a,b define swap2 a,b define swap3 a,b int main 分析 交換兩個數,在初...

異或運算實現兩數交換

在 演算法競賽入門經典 第2版 p9,介紹了三種交換兩個數的方法。1 三變數法 incldueusing namespace std int main 2 不借助其他變數 incldueusing namespace std int main 3 異或運算 異或 是乙個數 算符。它應用於邏輯運算。異...

P1100 高低位交換(位運算)

給出乙個小於2 232的正整數。這個數可以用乙個3232位的二進位制數表示 不足3232位用00補足 我們稱這個二進位制數的前1616位為 高位 後1616位為 低位 將它的高低位交換,我們可以得到乙個新的數。試問這個新的數是多少 用十進位制表示 例如,數13145201314520用二進位制表示為...