日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于异或的一些东西和应用

發布時間:2023/12/4 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于异或的一些东西和应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

異或是一種基于二進制的位運算,用符號XOR或者 ^ 表示,其運算法則是對運算符兩側數的每一個二進制位,同值取0,異值取1。它與布爾運算的區別在于,當運算符兩側均為1時,布爾運算的結果為1,異或運算的結果為0。

簡單理解就是不進位加法,如1+1=0,,0+0=0,1+0=1。

性質

1、交換律

2、結合律(即(a^b)^c == a^(b^c))

3、對于任何數x,都有x^x=0,x^0=x

4、自反性 A XOR B XOR B = A xor? 0 = A

異或運算最常見于多項式除法,不過它最重要的性質還是自反性:A XOR B XOR B = A,即對給定的數A,用同樣的運算因子(B)作兩次異或運算后仍得到A本身。這是一個神奇的性質,利用這個性質,可以獲得許多有趣的應用。 例如,所有的程序教科書都會向初學者指出,要交換兩個變量的值,必須要引入一個中間變量。但如果使用異或,就可以節約一個變量的存儲空間: 設有A,B兩個變量,存儲的值分別為a,b,則以下三行表達式將互換他們的值 表達式 (值) :

?A=A XOR B (a XOR b)

?B=B XOR A (b XOR a XOR b = a)?

?A=A XOR B (a XOR b XOR a = b)

?類似地,該運算還可以應用在加密,數據傳輸,校驗等等許多領域。

運用距離:

1-1000放在含有1001個元素的數組中,只有唯一的一個元素值重復,其它均只出現
一次。每個數組元素只能訪問一次,設計一個算法,將它找出來;不用輔助存儲空
間,能否設計一個算法實現?

解法一、顯然已經有人提出了一個比較精彩的解法,將所有數加起來,減去1+2+...+1000的和。
這個算法已經足夠完美了,相信出題者的標準答案也就是這個算法,唯一的問題是,如果數列過大,則可能會導致溢出。
解法二、異或就沒有這個問題,并且性能更好。
將所有的數全部異或,得到的結果與1^2^3^...^1000的結果進行異或,得到的結果就是重復數。

但是這個算法雖然很簡單,但證明起來并不是一件容易的事情。這與異或運算的幾個特性有關系。
首先是異或運算滿足交換律、結合律。
所以,1^2^...^n^...^n^...^1000,無論這兩個n出現在什么位置,都可以轉換成為1^2^...^1000^(n^n)的形式。

其次,對于任何數x,都有x^x=0,x^0=x。
所以1^2^...^n^...^n^...^1000 = 1^2^...^1000^(n^n)= 1^2^...^1000^0 = 1^2^...^1000(即序列中除了n的所有數的異或)。

令,1^2^...^1000(序列中不包含n)的結果為T
則1^2^...^1000(序列中包含n)的結果就是T^n。
T^(T^n)=n。
所以,將所有的數全部異或,得到的結果與1^2^3^...^1000的結果進行異或,得到的結果就是重復數。

當然有人會說,1+2+...+1000的結果有高斯定律可以快速計算,但實際上1^2^...^1000的結果也是有規律的,算法比高斯定律還該簡單的多。 ? google面試題的變形:一個數組存放若干整數,一個數出現奇數次,其余數均出現偶數次,找出這個出現奇數次的數? ?

解法有很多,但是最好的和上面一樣,就是把所有數異或,最后結構就是要找的,原理同上!!


奇數個異或是本身,偶數個是0;0^a=a;異或有交換律

轉載于:https://www.cnblogs.com/JSD1207ZX/p/9386255.html

總結

以上是生活随笔為你收集整理的关于异或的一些东西和应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。