異或的性質
1.異或的本質是 無進製相加->相同為0,不同為1
2.異或的性質 a^a=0, a^0=a 以及交換律,結合率
異或的新用法:
1.不占用額外空間的交換位置ab
2.乙個陣列中乙個數出現奇數次,其他數出現偶數次,通過異或找到該奇數次的數
[偽**]
a[n];
auto eor=0;
for(i from 0 to n)eor=eor^a[i];
因為交換律和結合律,偶數次的數經過異或後結果是0,最終表示式為奇數次的數an^0=an
3.乙個陣列中兩個數出現奇數次,其他數出現偶數次,也可以通過異或找到該奇數次的數(高階)
原理:
篩選數:
如何得到eof`?
[偽**]
a[n];
int eor=0,eor`=0;
for(i from 0 to n)eor=eor^a[i];
int rightone= eor&(~eor+1);//得到乙個篩選數,該數可以篩選出第x位為1的數
for(int cur:a[n])
if(a[n]&rightone!=0)eor`=(eor`)^a[n];//此時第x為1的數被異或進eor`,但偶數次數的相抵消為0,eor`存的是a或者b中第x位為1的那個數
eof=eof^eof`;//a^b^a=b,另乙個數.即eof和eof`分別儲存了兩個次數為1的數
異或 異或相關
感謝 morning glory 贊助 異或異 或 de scri ptio ndes crip tion 給定 l,r l,r,求 i lr j lr i ji l r j l r i jl,r 1 09l,r 1 09 s olut ions olut ion 假設l 1,r 4l 1,r 4,...
異或 的一些用法
異或是位運算,當且僅當兩邊相等時為真 即1 1 0 0 1 1 0 0 1 0 異或有很多有用且快速的用法。交換兩個數 a 10,b 5 經過下面操作 1 a b 2 b a 3 a b 輸出a 5,b 10 判斷二進位制數中1的個數 例如 a 1010,利用a a 1 每次能去掉最右邊那個1,迴圈...
異或運算 有趣的異或運算
異或運算可以看做是沒有進製的加法,按位異或運算,相同為0,不同為1。0 0 0 0 1 1 1 0 1 1 1 0 觀察運算結果我們發現,當與0做異或運算時,另一元值不變 而與1做異或運算時,另一元值值取反。根據以上異或運算的特徵,可以有以下用途,除方便直觀外,運算效能也更加優異。1 變數重置0 假...