精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

異或運算常見的應用

開發 前端
大家可能比較熟悉 "與" 運算 和 "或" 運算 ,相對而言, "異或" 運算 平常使用較少,存在感也不強,如果不是刻意提起,可能還想不到它。

[[434244]]

大家可能比較熟悉 "與" 運算 和 "或" 運算 ,相對而言, "異或" 運算 平常使用較少,存在感也不強,如果不是刻意提起,可能還想不到它

其實,"異或" 運算也非常重要,它在加密、備份、算法等方面都有應用,每一位開發的同學都應該花點兒時間掌握它的特點和規律,以便在日常工作中能靈活的運用

接下來將介紹異或運算的一些基礎知識以及在實際中的一些應用

基礎知識

異或是計算機中一種二元邏輯運算, 運算符號是 ^,它按照二進制位進行異或運算,結果為 真 或 假, 它的運算法則如下

x y x^y
0 0 0
0 1 1
1 0 1
1 1 0

表格 第一列 和 第二列 是異或運算的兩個操作數,第三列是異或運算的結果,1 表示真,0 表示假

由表格可知:如果參與運算的兩個二進制位相同,則結果為 0 ,否則為 1

也就是說,異或主要用來判斷兩個值是否相同

重要的性質

下面列出異或運算一些重要的性質,1 表示真,0 表示假, 具體的驗證過程比較簡單,這里就省略了

1、一個數與自身異或,總是為 0

  1. x ^ x = 0 

2、 一個數與 0 異或,總是其自身

  1. x ^ 0 = x 

3、 交換性

  1. x ^ y = y ^ x 

4、 結合性

  1. x ^ ( y ^ z ) = ( x ^ y ) ^ z 

常見應用

異或運算本身比較簡單,重點還是在應用層面,上面列出的性質,在很多方面都有應用

  • 判斷兩個數是否相等

一個數與自身異或,總是為 0,我們可以使用這一點來判斷兩個變量是否相等

  1. ( a ^ b ) == 0 

當 a 和 b 相等時,表達式為真,否則為假

  • 不使用臨時變量交換兩個數的值

要交換兩個數的值,通常做法是借助一個臨時變量,然后再進行交換,比如:tmp 是臨時變量,現需要交換 a 和 b 兩個變量值,過程如下

  1. tmp = a 
  2. a = b 
  3. b = tmp; 

利用異或的一些性質,不用臨時變量也能實現交換兩個數的值,具體過程如下

  1. a = a ^ b 
  2.  
  3. b = a ^ b 
  4.  
  5. a = a ^ b 

假如初始時,a = 1、b = 2

第一個等式 a = a ^ b 結果是 a = 1 ^ 2 = 3

緊接著第二個等式 b = a ^ b 結果是 b = 1 ^ 2 ^ 2 = 1 ^ 0 = 1

最后一個等式 a = a ^ b 結果是 b = 1 ^ 2 ^ 1 = 1 ^ 1 ^ 2 = 0 ^ 2 = 2

可以看到,最終 a = 2、 b = 1 ,它們的值實現了交換

上面的三條語句還可以進一步優化成一條,結果如下

  1. a ^= b ^= a ^= b 
  • 簡化表達式

根據交換性,可以優化表達式中重復變量的異或運算,比如:表達式 a ^ b ^ c ^ a ^ b 可以做如下簡化

  1. a  ^  b  ^  c  ^  a  ^  b                   # 根據 x ^ y  = y ^ x 
  2.  
  3. =  ( a  ^  a )  ^  ( b  ^  b )  ^  c        # 根據 x  ^ x = 0 
  4.  
  5. =  0  ^  0  ^  c                            # 根據 x ^ 0 = x 
  6.  
  7. = c 
  • 加密

利用異或運算加密是很常見的加密手段,它涉及到三個變量:明文、密鑰、密文,假如它們分別記為 plain_text、 encrypt_key、 cipher_text

明文和密鑰進行異或運算,可以得到密文

  1. plain_text ^ encrypt_key = cipher_text 

密文和密鑰進行異或運算,可以得到明文

  1. cipher_text ^ encrypt_key  
  2. = ( plain_text  ^  encrypt_key ) ^ encrypt_key 
  3. = plain_text  ^ ( encrypt_key ^ encrypt_key )   # 根據 x ^ ( y ^ z ) = ( x ^ z ) ^ y 
  4. = plain_text  ^  0                              # 根據 x ^ x = 0 
  5. = plain_text 
  • 備份

根據異或的性質,異或運算還可以用于文件的備份

現有兩個文件 filea 和 fileb,它們進行異或運算,會產生一個新的備份文件 bakfile

  1. bakfile = filea ^ fileb 

根據異或的性質,可以通過 bakfile 和 filea 得到 fileb,或者通過 bakfile 和 fileb 得到 filea

后面無論是 filea 或 fileb 文件損壞了,只要不是兩個文件同時損壞,都可以通過兩者中未損壞的文件 和 bakfile 文件,還原得到另一個文件

當 filea 文件損壞了,可以通過 fileb 和 bakfile 進行異或運算得到完好的 filea 文件

  1. fileb  ^  bakfile 
  2. =  fileb  ^ ( filea  ^  fileb ) 
  3. =  fileb  ^  filea  ^  fileb        # 根據 x ^ ( y ^ z ) = ( x ^ z ) ^ y 
  4. =  fileb  ^  fileb  ^  filea        # 根據 x ^ x = 0 
  5. =  0  ^ filea                       # 根據 x ^ 0 = x 
  6. =  filea 

同樣,當 fileb 文件損壞了,可以通過 filea 和 bakfile 進行異或運算得到完好的 fileb 文件

f

  1. filea  ^  bakfile 
  2. =  filea  ^ ( filea  ^  fileb ) 
  3. =  filea  ^  filea  ^  fileb        # 根據 x ^ ( y ^ z ) = ( x ^ z ) ^ y  
  4. =  filea  ^  filea  ^  fileb        # 根據 x ^ x = 0 
  5. =  0  ^ fileb                       # 根據 x ^ 0 = x 
  6. =  fileb 

解算法題

有些算法可以利用異或的思路進行求解,下面列出力扣上的一道算法題來說明,題目如下:

  1. 一個長度為 n-1 的遞增排序數組中的所有數字都是唯一的,并且每個數字都在范圍 0 ~ n-1 之內, 
  2.  
  3. 在范圍 0 ~ n-1 內的 n 個數字中有且只有一個數字不在該數組中,請找出這個數字 
  4.  
  5.  
  6. 示例 1: 
  7.  
  8. 輸入: [ 0,1,3 ] 
  9.  
  10. 輸出: 2 
  11.  
  12.  
  13. 示例 2: 
  14.  
  15. 輸入: [ 0,1,2,3,4,5,6,7,9 ] 
  16.  
  17. 輸出: 8 

最快捷的解決方法是把數組的所有元素以及 0 到 n-1 之間的整數 全部進行異或運算

  1. arry[0] ^ arry[1] ^ arry[2] ... ^ arry[n-2] ^ 0 ^ 1 ^ 2 .... ^ (n-1) 

由于數組元素值范圍在 0 到 n-1,且所有元素值都沒有重復

所以,上述的計算式子中,0 到 n-1 每個數會出現兩次,只有缺少的那個數僅出現一次,根據異或的性質 x ^ x = 0 可知,相同值之間的異或運算等于 0,因此算式的結果其實就是缺少的那個數

下面給出測試文件 test.cpp,代碼是用 C++ 實現的,可以自行用其他語言實現

  1. #include <stdint.h> 
  2. #include <iostream> 
  3. using namespace std; 
  4.  
  5. int32_t find_missing(int32_t *ary, int32_t len) 
  6.     //數組長度小于等于1,直接返回 -1 
  7.     if(len <= 1) 
  8.     { 
  9.         return -1; 
  10.     } 
  11.     //結果 
  12.     int32_t result = 0; 
  13.     //result 和 數組中每一個元素值進行異或運算 
  14.     for (int32_t i = 0; i < len; i++) 
  15.     { 
  16.         result ^= ary[i]; 
  17.     } 
  18.     //result 和 0 到 n 中每一個值進行異或運算 
  19.     for (int32_t j = 0; j <= len; j++) 
  20.     { 
  21.         result ^= j; 
  22.     } 
  23.     return result; 
  24. //編譯: g++ -g -o test  test.cpp 
  25. int32_t main(int32_t argc , char *argv[]) 
  26.     int32_t ary[] = { 0, 1, 3 }; 
  27.     int32_t result = find_missing(ary, sizeof(ary) / sizeof(int32_t)); 
  28.     std::cout << "result = " << result << std::endl; 
  29.      
  30.     return 0; 

使用 g++ -g -o test test.cpp 命令編譯,接著運行程序,結果如下:

  1. [root@localhost test]# ./test  
  2. result = 2 

當然,這道題目還有其他的解法,比如:利用加法來解,大家自己去思考下,這里不做介紹了

題目鏈接 https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof/

小結

通過上文,我們可以看到,異或運算在很多方面都有應用,其實,它的應用遠不止文中介紹的方面,所以,我們花時間去掌握它是非常值得做的一件事

 

責任編輯:武曉燕 來源: Linux開發那些事兒
相關推薦

2022-05-18 16:06:15

位運算異或運算

2022-05-23 15:02:19

異或運算面試真題

2017-08-29 09:40:26

JavaScript代碼神經網絡

2021-08-06 10:26:14

蜂窩物聯網物聯網IOT

2012-10-26 11:37:12

2022-10-26 14:55:53

AIoT物聯網人工智能

2023-02-03 16:16:34

物聯網

2012-02-02 15:24:57

2010-11-23 15:42:14

2010-01-04 15:12:27

Silverlight

2012-02-22 20:46:24

金萬維異速聯

2018-07-29 15:27:04

AI訓練光速運算人工智能

2021-02-21 06:36:57

運算技巧按位

2012-07-25 15:56:07

2013-05-08 11:01:35

BYODPC應用IT系統

2021-07-26 11:30:21

Wine開發者補丁

2010-03-05 16:38:48

Python應用范圍

2017-12-19 10:03:44

JavaLinux代碼

2018-05-28 08:28:24

云計算應用場景

2023-02-15 11:58:29

點贊
收藏

51CTO技術棧公眾號

亚洲制服丝袜在线播放| 亚洲成人网上| 日韩三级视频在线| 国产精品一区高清| 欧美高清hd18日本| 黄色一级大片免费| 欧美女子与性| 韩国毛片一区二区三区| 4438全国成人免费| 日韩免费av一区| 人人香蕉久久| 欧美高清性hdvideosex| 男女啪啪免费视频网站| 日本激情在线观看| 2024国产精品| 亚洲影院污污.| youjizz在线视频| 亚洲成人tv| 亚洲一级一级97网| 色悠悠在线视频| 亚洲精品三区| 欧美怡红院视频| 国产av国片精品| 国产激情小视频在线| 久久久久免费观看| 成人激情动漫在线观看| 亚洲第一区中文99精品| www.久久av.com| 范冰冰一级做a爰片久久毛片| 亚洲精品水蜜桃| 亚洲成人第一| 国产在线视频网站| 波多野结衣在线一区| 91久久久久久久久| 国产精品露脸视频| 久久久久国产精品一区二区| 欧美激情成人在线视频| 欧美h片在线观看| 人人狠狠综合久久亚洲婷婷| 精品视频在线播放| 国产精品久久无码| 国产精品2023| 日韩免费性生活视频播放| 日本超碰在线观看| 日本精品网站| 一本久久a久久精品亚洲| 国产极品在线视频| a'aaa级片在线观看| 一级做a爱片久久| 97在线看免费观看视频在线观看| 亚洲自拍欧美另类| 一级黄色在线视频| 国产精品亚洲产品| 97国产成人精品视频| 久久激情免费视频| 狠狠入ady亚洲精品| 欧美精品www| 久草视频免费在线播放| 国产一区久久| 欧美激情第三页| 欧美日韩中文视频| 国产精品女主播一区二区三区| 欧美激情18p| 国产亚洲自拍av| 精品动漫3d一区二区三区免费版| 欧美极品xxxx| 日本系列第一页| 亚洲另类自拍| 青草热久免费精品视频| 免费黄色av片| 麻豆成人av在线| 亚洲va久久久噜噜噜久久天堂| 国产麻豆91视频| 国产成人8x视频一区二区| 国产精品播放| 毛片在线免费| 日本一二三不卡| 四虎永久免费网站| 国产va在线视频| 欧洲精品一区二区| 国产5g成人5g天天爽| 国产三级精品三级在线观看国产| 亚洲成人精品久久久| 亚洲综合色一区| 国产精品久久久久久久| 久久久久久久久综合| 欧美亚洲另类小说| 国产一区二区在线观看视频| 国产美女99p| av大片在线观看| 亚洲一区二区三区小说| 人妻内射一区二区在线视频 | 久久青草福利网站| 在线免费观看av网址| 国产精品一区二区免费不卡| 精品福利影视| 久草免费在线| 日韩欧美国产一区二区| 婷婷中文字幕在线观看| 亚洲va久久久噜噜噜久久| 久久久999精品视频| 精品国产免费观看| 激情综合网av| 欧美日韩国产精品一区二区| 免费在线观看黄| 黑人与娇小精品av专区| 欧美激情第一区| 亚洲大片精品免费| 欧美激情国产精品| 一级黄色a毛片| 久久亚洲欧美国产精品乐播 | 97中文在线观看| 岛国最新视频免费在线观看| 亚洲一区二区三区四区不卡| 999精彩视频| 日韩美女国产精品| 欧美黑人一级爽快片淫片高清| 久久久久精彩视频| 91蝌蚪国产九色| www.亚洲视频.com| 国产精一区二区| 这里只有精品在线播放| 久久国产精品系列| 成人午夜av电影| 无码人妻精品一区二区蜜桃百度| 姬川优奈av一区二区在线电影| 亚洲国产欧美精品| 麻豆亚洲av熟女国产一区二| 美国av一区二区| 奇米影视首页 狠狠色丁香婷婷久久综合| 成人影院在线看| 欧美日韩亚洲不卡| 午夜精产品一区二区在线观看的| 一区二区国产精品| 国产欧美一区二区三区另类精品| yellow91字幕网在线| 欧美日韩免费高清一区色橹橹| 18禁裸乳无遮挡啪啪无码免费| 激情久久一区| 国产福利一区二区三区在线观看| 亚欧无线一线二线三线区别| 欧洲伦理片一区 二区 三区| 亚洲成av人片在www色猫咪| www.午夜av| 99久久影视| 国产日韩精品一区二区| 1pondo在线播放免费| 在线一区二区视频| 精品一区二区三区蜜桃在线| 日本美女一区二区| 亚洲精品日韩在线观看| 日韩天堂在线| 少妇高潮 亚洲精品| 久久这里只有精品9| 国产婷婷一区二区| 国产精品久久久久9999小说| 欧美精美视频| 国产精品人人做人人爽| av网站无病毒在线| 欧美日本一区二区| www.av成人| 国产成人亚洲综合a∨猫咪| 小泽玛利亚av在线| eeuss国产一区二区三区四区| 欧美国产激情18| 天堂av中文字幕| 一本一道久久a久久精品| 影音先锋男人在线| 精品一区二区影视| 国产91在线亚洲| 老司机凹凸av亚洲导航| 日韩免费在线播放| 国产黄色在线网站| 亚洲第一精品电影| 秋霞av一区二区三区| 国产精品免费视频网站| 中文字幕 欧美 日韩| 国产亚洲精品v| 亚州欧美一区三区三区在线| 亚洲综合伊人| 4438全国成人免费| 精品视频在线一区二区| 精品乱人伦小说| 日韩在线 中文字幕| 中文字幕制服丝袜成人av | 日韩一区视频在线| 亚洲精品久久久久久无码色欲四季| 精品久久久久久中文字幕大豆网| 亚洲精品色午夜无码专区日韩| 久久成人久久鬼色| 日日橹狠狠爱欧美超碰| 人人狠狠综合久久亚洲婷婷| 国产二区一区| 久久91视频| 69影院欧美专区视频| 香蕉视频网站在线观看| 亚洲国产中文字幕在线观看| 在线观看免费视频a| 亚洲一区二区三区自拍| 长河落日免费高清观看| 99麻豆久久久国产精品免费优播| 亚洲一级免费在线观看| 亚洲乱码久久| 亚洲av综合色区| av一区二区高清| 国产精品久久国产精品| 91九色成人| 青青青国产精品一区二区| 色图在线观看| 在线看日韩av| 亚洲人在线观看视频| 欧美成人乱码一区二区三区| 波多野结衣mp4| 香蕉影视欧美成人| 欧美成人一二三区| 国产精品成人午夜| 无码人妻精品一区二区中文| 国产成人精品午夜视频免费| 日韩不卡一二三| 日本在线不卡一区| 男人用嘴添女人下身免费视频| 中文字幕午夜精品一区二区三区 | 成人在线观看亚洲| 日韩中文av在线| 国产精品四虎| 亚洲黄在线观看| www.亚洲黄色| 538在线一区二区精品国产| 好吊妞视频一区二区三区| 亚洲资源中文字幕| 国产a免费视频| 亚洲免费在线电影| 亚洲欧美精品aaaaaa片| 中文字幕亚洲不卡| 日本一级片免费| 亚洲国产精品成人久久综合一区 | 国产精品一区二区三区av麻| 九九九九精品九九九九| 国产成人精品亚洲线观看| 99在线观看视频| 亚洲精品在线播放| 国产精品伊人日日| 粉嫩av一区二区| 国产伦精品一区二区三区高清版| jizz性欧美2| 国产精品制服诱惑| 久久精品亚洲成在人线av网址| 国产高清精品一区二区| 久久九九热re6这里有精品| 精品国产aⅴ麻豆| 麻豆一区二区麻豆免费观看| 精品免费日产一区一区三区免费| 红杏aⅴ成人免费视频| 久久久一本精品99久久精品| 亚洲精品国产动漫| 日韩欧美在线一区二区| 欧美日韩亚洲在线观看| 一区二区免费电影| 国产精品毛片一区二区在线看| 黄色免费高清视频| 欧美日韩国产欧| 丁香六月激情婷婷| 国产精品久久久免费| 国产免费人做人爱午夜视频| 奇米精品一区二区三区在线观看一| 91精品无人成人www| 久久99热99| 国产免费a级片| 久久综合网色—综合色88| 国产精品国产三级国产专业不| 国产精品视频免费看| 手机在线免费看片| 午夜精品成人在线视频| 日韩一级片中文字幕| 91麻豆精品国产91久久久资源速度| 国产黄色小视频在线观看| 日韩精品免费在线观看| 91精品专区| 久久久久久久一区二区| 午夜日韩成人影院| 91亚洲永久免费精品| 欧美黑白配在线| 色婷婷精品国产一区二区三区| 亚洲一本二本| 给我免费播放片在线观看| 丝袜a∨在线一区二区三区不卡| 黄色一级片免费的| 99久久婷婷国产综合精品电影 | 欧美激情777| 给我免费播放片在线观看| 蜜桃久久久久久久| 97中文字幕在线观看| 国产欧美视频一区二区三区| 草视频在线观看| 日韩欧美国产免费播放| www国产一区| 亚洲人成在线免费观看| 欧美黄色视屏| 国产精品直播网红| 天堂网av成人| 黄色网zhan| 日韩国产成人精品| 香蕉视频免费网站| 国产精品嫩草99a| 4438国产精品一区二区| 日韩精品专区在线影院观看| 大地资源中文在线观看免费版| 久久久久久久久久久人体| 福利一区二区| 日本免费高清不卡| 在线成人亚洲| 91热视频在线观看| 欧美激情一区二区| 99久热在线精品996热是什么| 日韩写真欧美这视频| 波多野结衣在线影院| 欧美伊久线香蕉线新在线| 日韩第一区第二区| 中文字幕在线亚洲精品| 巨乳诱惑日韩免费av| 欧美xxxxx精品| 一区av在线播放| av一区二区三| 俺去啦;欧美日韩| 九七影院97影院理论片久久 | 亚洲人成免费网站| 超碰超碰在线观看| 国产欧美精品国产国产专区 | 裸体在线国模精品偷拍| 国产熟妇久久777777| 欧美视频在线观看免费| 色一情一乱一乱一区91av| 色综合91久久精品中文字幕 | 日韩一区二区免费高清| 欧美一区二区三区| 国产欧美精品久久久| 欧美三级伦理在线| 精品久久久久av| 久久精品这里都是精品| youjizz在线视频| 亚洲精美色品网站| 欧美男男tv网站在线播放| 国产伦精品一区二区三区高清| 亚洲国产免费| 亚洲第一黄色网址| 欧美性猛交xxxx乱大交3| 水莓100国产免费av在线播放| 55夜色66夜色国产精品视频 | 风流少妇一区二区| 欧美精品入口蜜桃| 亚洲高清久久网| 涩涩涩在线视频| 欧美日韩一区二区三区在线观看免| 国产欧美大片| 最近中文字幕在线mv视频在线 | 激情五月俺来也| 中文字幕一区二区三| 国产高清视频免费| 久久久亚洲网站| 亚洲制服欧美另类| xxxx一级片| 自拍偷拍国产亚洲| 高潮一区二区三区乱码| 97国产在线视频| 精品中文一区| 一区二区三区四区毛片| 亚洲国产欧美日韩另类综合| 日本毛片在线观看| 国产91色在线|免| 欧美电影免费播放| 国产xxx在线观看| 色一情一乱一乱一91av| 欧美另类极品| 5566中文字幕一区二区| 亚洲中字黄色| 美国一级黄色录像| 精品美女一区二区三区| 国精产品一区二区三区有限公司| 永久免费精品视频网站| 成人a区在线观看| 91丨九色丨海角社区| 欧美精品一区二区三区国产精品 | 五月天色婷婷综合| 成人免费视频视频在线观看免费 | 瑟瑟视频在线看| 亚洲视频精品一区| 粉嫩绯色av一区二区在线观看 | 亚洲精品欧美精品| 成人午夜伦理影院| 中文字幕在线视频免费| 午夜精品一区二区三区在线| 欧美亚洲精品在线| 亚洲一二三四五| 欧美视频在线一区| 国内老司机av在线| 亚洲一区二区三区精品在线观看| 成人综合在线网站| 国产一区二区三区成人| 欧美在线播放视频| 国模 一区 二区 三区|