常用的位運算有6個:
&
|
~
^
相當於不進製的加法
<<
<< 1 相當於x2 上取整 << 3相當於x8
>>
>> 1 相當於/2 下取整
lowbit運算1:n & -n
表示 n的二進位制表示裡最右邊的1,所以n & -n == n
表示n為2的整數次冪,n & -n < n
則n不為2的整數次方
lowbit運算2:n & (n -1)
就會把該整數二進位制的最後一位1置零
異或運算^:a ^ a = 0
,0 ^ a = a
而且異或滿足交換律和結合律本題思考方式可以將數字的最後一位和1進行與運算,然後右移來統計二進位制中的1.但是如果整數為負數的時候,就會出現補1的情況從而造成死迴圈。
將輸入的數字強制轉換成unsigned int
型別即可。
class solution
};
設定乙個unsigned int flag = 1 每次與輸入整數進行與運算後判斷是否為1爾後左移統計1的個數,從而負數高位補零造成死迴圈。
class solution
return res;}}
;
n & (n -1)就會把該整數二進位制的最後一位1置零。那麼二進位制數有多少個1就會進行多少次這樣的操作。
class solution
return res;}}
;
給定乙個整數,編寫乙個函式來判斷它是否是 2 的冪次方。
利用lowbit運算即可判斷:
class solution
};
給定兩個整數 l 和 r ,找到閉區間 [l, r] 範圍內,計算置位位數為質數的整數個數。
注意:
class solution );
int res =0;
for(
int n = l; n <= r; n++
)return res;}}
;
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
運用異或的性質即可,相同數字異或相當於消消樂,即為0,而0與任何數字異或都等於當前數字。
class solution
};
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。
要求:不使用額外的空間
class solution
return res;}}
;
給定乙個整數陣列 nums,其中恰好有兩個元素只出現一次,其餘所有元素均出現兩次。 找出只出現一次的那兩個元素。
class solution );
}};
給定乙個正整數,輸出它的補數。補數是對該數的二進位制表示取反。
輸入兩個數m和n,計算需要改變m的二進位制表示的多少位才能得到n。
位運算總結
位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...
位運算總結
位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...
位運算總結
一 優先順序 高 低 算術運算子 關係運算子 賦值 二 移位運算 要點 1 它們都是雙目運算子,兩個運算分量都是整形,結果也是整形。2 左移 右邊空出的位上補0,左邊的位將從字頭擠掉,其值相當於乘2。3 右移 右邊的位被擠掉。對於左邊移出的空位,如果是正數則空位補0,若為負數,可能補0或補1,這取決...