參加運算的兩個數,按二進位制位進行「&」運算。
運算規則:只有兩個數的二進位制同時為1,結果才為1,否則為0。(負數按補碼形式參加按位與運算)
即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。
比如10&11:
即 0000 1010 & 0000 1011 = 0000 1010 所以 10&11 等於10;
參加運算的兩個數,按二進位制位進行「或」運算。
運算規則:參加運算的兩個數只要兩個數中的乙個為1,結果就為1。
即 0 | 0= 0 , 1 | 0= 1 , 0 | 1= 1 , 1 | 1= 1 。
比如10|11:
即 0000 1010& 0000 1011 = 0000 1011 所以10|11 等於11;
參加運算的兩個數,按二進位制位進行「異或」運算。
運算規則:參加運算的兩個數,如果兩個相同位相異為1,相同為0。
即 0 ^ 0=0 , 0 ^ 1= 1 , 1 ^ 0= 1 , 1 ^ 1= 0 。
比如3^5 :
即 0000 0011 ^0000 0101 = 0000 0110
所以 3 ^5 等於 6;
1.異或運算子通常還可以用來實現兩個數的交換:(不用建立臨時變數)
比如 int a = 3,int b = 5;交換a和b。
int a = 3;
int b = 5;
a = a ^ b;//①
b = a ^ b;//②
a = a ^ b;//③
①
0000 0011 ^ 0000 0101 = 0000 0110 所以a = 0000 0110
②0000 0110 ^ 0000 0101 = 0000 0011 所以 b = 0000 0011
③0000 0110 ^ 0000 0011 = 0000 0101 所以a = 0000 0101
所以結果為:
a = 5, b = 3;
面試題:只出現一次的數字
問題描述:給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
思路:
0 ^ n = n;
n ^ n = 0;
看**:
class solution {
public:
int singlenumber(vector& nums) {
int value = 0;
for(size_t i = 0;i如果對各位看官有幫助,麻煩動一動手指d(゚∀゚d)點讚!
位與 按位或 按位異或 運算
1.按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例如 9 5可寫算式如下 00001001 9的二進位制補碼 00000101 5的二進位制補碼 00000001 1的二進位制補碼...
位運算(按位與 按位或 異或)
按位與運算子 參加運算的兩個數,按二進位制位進行 與 運算。運算規則 只有兩個數的二進位制同時為1,結果才為1,否則為0。負數按補碼形式參加按位與運算 即 0 0 0 0 1 0,1 0 0,1 1 1。例 3 5 即 00000011 00000101 00000001 所以 3 5的值為1。按位...
按位與,按位或,異或等運算
參加運算的兩個資料,按二進位制位進行 與 運算。運算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩位同時為 1 結果才為 1 否則為0 例如 3 5 即 0000 0011 0000 0101 0000 0001 因此,3 5的值得1。另,負數按補碼形式參加按位與運算。與運算 的特殊用...