位運算(&、|、^、~、>>、<<):從現代計算機中所有的資料二進位制的形式儲存在裝置中。即 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個數出現了奇數次,其餘數都出現了偶數次...