成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

位運算的秒用--異或運算

開發 前端
如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。(這特么是啥?)沒明白沒有關系。

先來看一個case

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

如何交換兩個數?

問題當然很簡單,交換兩個數,常規的做法是引入一個中間變量,代碼如下

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

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

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

其實很簡單,代碼如下:

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

相信您現在應該和我第一次看到這個代碼的感覺一樣,這特么是啥?????這樣能把a和b的值交換?

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

異或運算

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

先看定義

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

舉個例子

比如a=5,b=3。

  • 首先 你得把a和b轉換成二進制,那么a=101, b= 011。
  • 然后a和b進行異或運算,一位一位的去對比,如果值相同,則對應位置異或運算的結果為0,如果值不同,則對應位置異或運算的結果為1。

異或運算示意圖

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

異或運算的特點

0和任何數N進行異或運算,結果為N

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

任何數和0進行異或運算

任何數N和自己進行異或運算,結果為0

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

任何數和自己進行異或運算

異或運算滿足交換律和結合律

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

再來看開頭的例子

當你對異或運算有一定的了解了之后,咱們再來看一看開頭的例子:

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

第一步運算:

a = a ^ b

第二步運算:

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

所以:

b = a ^ b ^ b

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

b= a^0

咱們在上面還說過,「任何數和0進行異或運算,都等于他自己」,所以:

b=a^0 = a

第三步運算:

a = a ^ b

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

a = a^b^a = 0^b = b(運算細節同第二步)

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

責任編輯:姜華 來源: 程序員小飯
相關推薦

2022-05-23 15:02:19

異或運算面試真題

2021-11-10 09:57:02

異或運算應用

2022-08-01 08:12:14

位運算代碼性能

2020-03-25 10:44:16

位運算操作技巧

2021-02-21 06:36:57

運算技巧按位

2017-08-29 09:40:26

JavaScript代碼神經網絡

2021-10-11 09:41:20

React位運算技巧前端

2009-07-31 16:48:44

C#位運算

2011-08-29 15:53:04

Lua位運算

2009-08-12 10:20:52

C#位運算符

2023-04-07 08:02:54

源碼位邏輯運算符

2024-06-11 14:57:00

2009-06-18 13:06:59

C#位運算權限管理

2021-01-23 12:22:59

位運算編程語言開發

2018-07-29 15:27:04

AI訓練光速運算人工智能

2009-08-12 10:47:03

C#運算符重載

2020-11-09 10:01:29

Python乘法位運算

2009-06-11 16:11:26

Java運算器一則運算

2025-02-24 11:16:20

2012-03-14 11:13:27

Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久不卡日韩美女 | 最新国产精品精品视频 | 一起操网站 | 欧美成人免费在线 | 永久免费av | 久久久青草婷婷精品综合日韩 | 欧美国产视频 | 91久久久久久久久久久久久 | 午夜小电影 | 99久久婷婷 | 毛片在线免费 | 国产精选一区 | 国产在线拍偷自揄拍视频 | 91精品国产一区 | 综合久久综合久久 | 久久精品国产v日韩v亚洲 | 麻豆久久久9性大片 | 看片一区| 午夜男人天堂 | 久久婷婷国产麻豆91 | 在线视频一区二区三区 | 亚洲视频一区二区三区 | 国产精品日韩欧美一区二区三区 | 欧美片网站免费 | 亚洲精品久久久一区二区三区 | 成人午夜免费福利视频 | 最近最新中文字幕 | 国产精品国产精品国产专区不片 | 亚洲国产精品久久久久秋霞不卡 | 波多野结衣一区二区 | 精品久久久久久久久久久久 | 亚洲一区中文字幕 | 久久国产激情视频 | 国产乱码久久久 | 我要看黄色录像一级片 | 欧美成人自拍 | 国产在线麻豆精品入口 | 欧美看片 | 欧美精品电影一区 | www国产精| 国产精品成人在线播放 |