位運算 刷題總結

2021-10-21 07:30:16 字數 1005 閱讀 5094

位運算(&、|、^、~、>>、<<):從現代計算機中所有的資料二進位制的形式儲存在裝置中。即 0、1 兩種狀態,計算機對二進位制資料進行的運算(+、-、*、/)都是叫位運算。

判斷兩個數是否異號

int x =-1

, y =2;

bool f =

((x ^ y)

<0)

;// true

int x =

3, y =2;

bool f =

((x ^ y)

<0)

;// false

這個技巧還是很實用的,利用的是補碼編碼的符號位。如果不用位運算來判斷是否異號,需要使用 if else 分支,還挺麻煩的。讀者可能想利用乘積或者商來判斷兩個數是否異號,但是這種處理方式可能造成溢位,從而出現錯誤。

消除數字 n 的二進位制表示中的最後乙個 1

其核心邏輯就是,n - 1 一定可以消除最後乙個 1,同時把其後的 0 都變成 1,這樣再和 n 做一次 & 運算,就可以僅僅把最後乙個 1 變成 0 了。

【力扣-191. 位1的個數】

public

inthammingweight

(int n)

return ans;

}

【力扣-136. 只出現一次的數字】

// 用位運算的知識,本題利用異或運算

class

solution

return pro;

}}

常用的位操

位運算總結(刷題)

4.繼續刷題 不用額外的變數交換兩個整數的值 異或應用 5.不用任何比較判斷找出兩個數中較大的數 6.只用位運算不用算術運算實現整數的加減乘除運算 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函...

位運算題 刷題總結

給定乙個整數陣列 nums,其中恰好有兩個元素只出現一次,其餘所有元素均出現兩次。找出只出現一次的那兩個元素。示例 輸入 1,2,1,3,2,5 輸出 3,5 方法 異或 我知道異或可以使所有一對一對的值都消失,得到只出現過一次的數的異或值,但是這題的重點是,你得到兩個只出現一次的數之後,如何區分?...

刷題 位運算

includeusing namespace std 不使用中間變數交換兩個整數的值 void swap int a,int b 整數的二進位制表達中有多少個1 int number of one int n return result 在乙個整數陣列中,只有1個數出現了奇數次,其餘數都出現了偶數次...