位運算的奇技淫巧 系列1

2022-09-10 17:57:15 字數 1187 閱讀 9349

以下內容就不講位運算的基礎了,需要複習位運算的同學,可以參考我的以下文章

位運算基礎

位運算例子

為什麼要介紹位運算呢?位運算更符合計算機的執行方式,即使是用c,c++,j**a,python,vb,等程式語言,到最後都會被變成二進位制檔案,讓運算器進行位運算。因此,我們幫計算機做好了識別符號的轉換,這樣就讓程式跑的快一點。

技巧一:

用o(1)時間檢查整數n是否是2的冪次

首先思路分析:

n如果是2的冪次,則n滿足兩個條件。

1.n >0

2.n的二進位制表示中只有乙個1 1111對應8421慢慢體會

因為n的二進位制表示中只有乙個1,所以使用n & (n - 1)將n唯一的乙個1消去,應該返回0。

技巧二

消去二進位制中的最後一位1

x &

(x -

1) 用於消去x最後一位的1

x =1100

x -1

=1011

x &(x -1)

=1000

技巧三

計算在乙個 二進位制數中有多少個 1。

利用乙個變數count

由x & (x - 1)消去x最後一位的1可知。不斷使用 x & (x - 1) 消去x最後一位的1,計算總共消去了多少次即可。count++即可

技巧四

二進位制或者別的進製,別的進製需要先轉進製

後續我會放出進製轉換函式,呼叫即可,先留個位置

如果要將整數a轉換為b,需要改變多少個bit位?

思路將整數a轉換為b,如果a和b在第i(0<=i<32)個位上相等,則不需要改變這個bit位,如果在第i位上不相等,則需要改變這個bit位。所以問題轉化為了a和b有多少個bit位不相同。聯想到位運算有乙個異或操作,相同為0,相異為1,所以問題轉變成了計算a異或b之後這個數中1的個數。

技巧五

給出 2 * n + 1個數字,除其中乙個數字之外其他每個數字均出現兩次,找到這個數字

a ^ b ^ b = a
思路

因為只有乙個數恰好出現乙個,剩下的都出現過兩次,所以只要將所有的數異或起來,就可以得到唯一的那個數。

位運算奇技淫巧

位操作符 與運算 兩個位都是 1 時,結果才為 1,否則為 0,如 1 0 0 1 1 1 1 0 0 1 1 0 0 0 1 或運算 兩個位都是 0 時,結果才為 0,否則為 1,如 1 0 0 1 1 1 1 0 0 1 1 1 0 1 1 異或運算,兩個位相同則為 0,不同則為 1,如 1 0...

位運算的奇技淫巧

首先,先來介紹一下關於位運算中的 異或 若參加運算的兩個二進位制位值相同則為0,否則為1 下面是異或運算的三個性質 交換律 a b c a c b 任何數與0異或 0 n n 相同的數異或為0 n n 0 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次...

位運算有什麼奇技淫巧?

計算機中的數在記憶體中都是以二進位制形式進行儲存的,用位運算就是直接對整數在記憶體中的二進位制位進行操作,因此其執行效率非常高,在程式中盡量使用位運算進行操作,這會大大提高程式的效能。int a 8 a 3 移位前 0000 0000 0000 0000 0000 0000 0000 1000 移位...