17 C 與 或 異或 取反等運算

2021-10-05 06:20:35 字數 2076 閱讀 4924

位運算符號優先級別從高到低:~ & ^ |;

其中~自由向左

0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1。

即同為1才為1;

c++輸出乙個數的二進位制; 標頭檔案#include;

如果a為int,其二進位制為:(bitset<32>(a))

如果其為long long,(bitset<64>(a))

0 | 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1

即有乙個為1即為1;

0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0

即相同為0,不同為1;

int a=3;

a=a^0;

//任何乙個數與0異或都為原數;

int b=3;

a=a^b;

;//乙個數和另乙個相等的數異域或為0;

int c=

4;

int a;

a=a^b;

b=b^a;

//b=b^a^b;

a=a^b;

//a=a^b^a^b^b;

哪些為0的位,結果是1,而哪些為1的位,結果是0。例如, ~7的結果為0xfff8。

移動n位,則相當於原數* 2^n;

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

依照這個思路,我們來看兩個數(我們假設是ab)出現一次的陣列。我們首先還是先異或,剩下的數字肯定是a、b異或的結果,這個結果的二進位制中的1,表現的是a和b的不同的位。我們就取第乙個1所在的位數,假設是第3位,接著把原陣列分成兩組,分組標準是第3位是否為1。如此,相同的數肯定在乙個組,因為相同數字所有位都相同,而不同的數,肯定不在一組。然後把這兩個組按照最開始的思路,依次異或,剩餘的兩個結果就是這兩個只出現一次的數字。

class

solution

*num1=r1;

*num2=r2;}}

;

思路:

& 按位與運算:相同位的兩個數字都為1,則為1;若有乙個不為1,則為0。兩個數相與,並左移一位:相當於求得進製

1&1=1 將1左移一位變成了10,相當於拿到了進製。

^ 按位異或運算:相同位置不同則為1,相同則為0。相當於每一位相加,而不考慮進製。

第一步 異或——無進製相加得result1 (a^b)

第二步 與+左移一位——求得進製result2 (a&b)<<1

第三步 result = result1 + result2即是結果

但問題在於,result1 + result2可能還有進製,因此result還要重複一二步這個過程。直到沒有進製,異或的結果就是最終的結果為止

如 101 + 011 -> 110 + 1010 -> 1100 + 0100 -> 1000 + 1000 -> 0 (異或出現了0,返回上一次異或的結果)

最終得到的是1000 也就是5+3=8

class

solution

while

(num1!=0)

;return temp;}}

;

根據c++上兩個互為相反數的int型資料的二進位制結構關係——整數的相反數等於該數按位取反再加1;

int

oppositenumber

(int n)

return

add(

~n,1);

intsubtract

(int a,

int b)

return

add(a,

oppositenumber

(b))

;}

int

subtract

(int a,

int b)

return a;

}

加減乘除的實現

C 與 或 異或 取反等運算

1.按位與 2.按位或 3.按位異或 4.按位取反 5.左移 6.右移 應用一 應用二 求兩數之和 求兩數之差 位運算符號優先級別從高到低 其中 自由向左 1.按位與 0 0 0,0 1 0,1 0 0,1 1 1。即同為1才為1 c 輸出乙個數的二進位制 標頭檔案 include 如果a為int,...

php位運算 與 或 異或 取反

php中有4個位運算,分別是 與 或 異或 取反 兩位全為1,結果為1 有一位為1,結果為1 乙個為0,乙個為1,結果為1 取反0 1,1 0 1.二進位制的最高位是符號位,0表示正數,1表示負數。2.正數的原碼,反碼,補碼都一樣。3.負數的反碼 它的原碼符號位不變,其它位取反 0 1,1 0 4....

php位運算 與 或 異或 取反

php中有4個位運算,分別是 與 或 異或 取反 兩位全為1,結果為1 有一位為1,結果為1 乙個為0,乙個為1,結果為1 取反0 1,1 0 1.二進位制的最高位是符號位,0表示正數,1表示負數。2.正數的原碼,反碼,補碼都一樣。3.負數的反碼 它的原碼符號位不變,其它位取反 0 1,1 0 4....