av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

位運(yùn)算的秒用--異或運(yùn)算

先來看一個case

馬邊彝族網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。

咱們今天閑話不用多說,先來看一個小例子。

如何交換兩個數(shù)?

問題當(dāng)然很簡單,交換兩個數(shù),常規(guī)的做法是引入一個中間變量,代碼如下

func Swap(a, b int){
temp := a //把a(bǔ)的值賦值給臨時變量temp,temp為a的值
a = b //把b的值賦值給a,現(xiàn)在a的值已經(jīng)變成了b的值
b = temp // 再把之前temp中保存的a賦值給b即可
}

相信上面的代碼大家應(yīng)該都沒問題,但是咱們來加大問題難度,如果不讓引入第三個變量temp,能實現(xiàn)兩個數(shù)字的交換么?

「建議大家先思考兩分鐘再往下看」。

其實很簡單,代碼如下:

func Swap(a, b int) {
a = a ^ b
b = a ^ b
a = a ^ b
}

相信您現(xiàn)在應(yīng)該和我第一次看到這個代碼的感覺一樣,這特么是啥?????這樣能把a(bǔ)和b的值交換?

先不要著急,咱們來一點一點的分析。

異或運(yùn)算

想要看懂上面的代碼,首先你得知道什么叫異或運(yùn)算。

先看定義

如果a、b兩個值不相同,則異或結(jié)果為1。如果a、b兩個值相同,異或結(jié)果為0。(這特么是啥?)沒明白沒有關(guān)系,咱們接下來看例子:

舉個例子

比如a=5,b=3。

  • 首先 你得把a(bǔ)和b轉(zhuǎn)換成二進(jìn)制,那么a=101, b= 011。
  • 然后a和b進(jìn)行異或運(yùn)算,一位一位的去對比,如果值相同,則對應(yīng)位置異或運(yùn)算的結(jié)果為0,如果值不同,則對應(yīng)位置異或運(yùn)算的結(jié)果為1。

異或運(yùn)算示意圖

  • 所以a和b的異或運(yùn)算的結(jié)果為 110 也就是6。
  • 異或運(yùn)算也可以按照另外一個角度去理解,就是「無進(jìn)位的加法」,其實也就是二進(jìn)制的相加,但是加完的結(jié)果不進(jìn)位而已。

異或運(yùn)算的特點

0和任何數(shù)N進(jìn)行異或運(yùn)算,結(jié)果為N

其實這個很好理解,任何數(shù)轉(zhuǎn)換成二進(jìn)制,每一位上的數(shù)字要么是0,要么是1,而和0進(jìn)行異或,以前是0的位置和0相同,則結(jié)果為0,以前是1的位置和0不同,則結(jié)果為1,所以運(yùn)算之后結(jié)果是沒變的,如下圖:

任何數(shù)和0進(jìn)行異或運(yùn)算

任何數(shù)N和自己進(jìn)行異或運(yùn)算,結(jié)果為0

這個也很好理解,N^N每一位肯定都會是一樣的,根據(jù)異或運(yùn)算的法則,結(jié)果肯定每一位都為0。

任何數(shù)和自己進(jìn)行異或運(yùn)算

異或運(yùn)算滿足交換律和結(jié)合律

這個很好理解 也就是說 a^b^c運(yùn)算 和c^b^a是一樣的。

再來看開頭的例子

當(dāng)你對異或運(yùn)算有一定的了解了之后,咱們再來看一看開頭的例子:

func Swap(a, b int) {
a = a ^ b
b = a ^ b
a = a ^ b
}

第一步運(yùn)算:

a = a ^ b

第二步運(yùn)算:

b = a ^ b
因為第一步a=a^b所以在第二步中直接把a(bǔ)替換成a^b即可

所以:

b = a ^ b ^ b

咱們在之前說過,「任何數(shù)字對自己進(jìn)行異或運(yùn)算的結(jié)果都為0」,所以b^b的結(jié)果就為0,上面也就等價于。

b= a^0

咱們在上面還說過,「任何數(shù)和0進(jìn)行異或運(yùn)算,都等于他自己」,所以:

b=a^0 = a

第三步運(yùn)算:

a = a ^ b

此時b已經(jīng)運(yùn)算出來為a,a = a ^ b(第一步運(yùn)算賦值) 所以第三步運(yùn)算等價于。

a = a^b^a = 0^b = b(運(yùn)算細(xì)節(jié)同第二步)

這樣咱們就可以不用第三個變量進(jìn)行兩個變量的交換了。


網(wǎng)頁名稱:位運(yùn)算的秒用--異或運(yùn)算
文章源于:http://uogjgqi.cn/article/cojhose.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流