位運算總結

2021-09-23 13:16:52 字數 1857 閱讀 2487

常用的位運算有6個:

&

|

~

^相當於不進製的加法

<<<< 1 相當於x2 上取整 << 3相當於x8

>>>> 1 相當於/2 下取整

lowbit運算1n & -n表示 n的二進位制表示裡最右邊的1,所以n & -n == n表示n為2的整數次冪,n & -n < n則n不為2的整數次方

lowbit運算2n & (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,這取決...