精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

免费在线观看亚洲视频| 国产91精品久久久久| 欧美成人手机在线视频| 在线网址91| av在线一区二区三区| 国产91在线播放| 天天看片中文字幕| av成人资源网| 在线观看av一区| 中文字幕の友人北条麻妃| 天堂在线免费av| 国产在线播放一区三区四| 久久久久久久久久久av| 手机毛片在线观看| 国产精品极品国产中出| 欧美日韩中文字幕一区二区| 成人午夜免费在线视频| 国产一二在线观看| 成人午夜av在线| 国产欧美在线视频| 可以免费看的av毛片| 亚洲国产老妈| 国产一区二区成人| 性囗交免费视频观看| 日韩成人久久| 欧美日韩国产另类不卡| 成人免费毛片播放| 欧美a大片欧美片| 国产精品国产三级国产专播品爱网 | 37p粉嫩大胆色噜噜噜| 不卡一区视频| 欧美日韩精品欧美日韩精品| 国产超级av在线| 国产极品人妖在线观看| 综合久久给合久久狠狠狠97色| 欧美高清视频一区二区三区在线观看 | av成人激情| 九九久久精品一区| 夫妻性生活毛片| 日韩欧美视频| 色综合影院在线| 日本乱子伦xxxx| 少妇精品久久久| 亚洲乱码国产乱码精品精| 伦理片一区二区| 成人av影音| 精品久久五月天| 麻豆tv在线观看| 亚洲日本va午夜在线电影| 91麻豆精品国产综合久久久久久 | 一区三区二区视频| 99久久久无码国产精品性| 日韩电影不卡一区| 精品亚洲永久免费精品| 人妻少妇精品视频一区二区三区 | 日韩成人在线观看| 日本一卡二卡在线| 欧美巨大xxxx| 亚洲伦理中文字幕| 国产精品无码一区二区三区| 四虎5151久久欧美毛片| 日韩av中文字幕在线免费观看| a级一a一级在线观看| 青青视频一区二区| 亚洲精选中文字幕| 日韩精品电影一区二区| sdde在线播放一区二区| 中文字幕亚洲自拍| 国产男女猛烈无遮挡在线喷水| 911久久香蕉国产线看观看| 久久电影一区二区| 久久久久久久久久久久久久免费看| 欧美色123| 91精品国产91久久久久久久久| 狠狠人妻久久久久久| 日韩高清欧美激情| 亚洲一区二区免费在线| 蜜桃视频污在线观看| av资源网一区| 日韩精品成人一区二区在线观看| 日本在线免费| 亚洲成人综合视频| 成人免费毛片播放| 午夜精品在线| 日韩福利在线播放| 99精品全国免费观看| 欧美一区二区三区免费看| 97免费在线视频| 亚洲另类欧美日韩| 精品一区二区三区免费毛片爱| av一本久道久久波多野结衣| 无码精品人妻一区二区三区影院| 国产欧美日韩综合| 天堂8在线天堂资源bt| 亚洲精品中文字幕| 日韩亚洲欧美在线观看| av在线网站观看| 91精品99| 国产精品av网站| 亚洲黄色小说网| 国产日韩欧美精品综合| 国产又粗又猛又爽又黄的网站| 在线观看精品| 亚洲成人精品久久| 四虎地址8848| 先锋影音久久久| 97碰碰视频| av在线首页| 精品国产户外野外| 在线a免费观看| 成人vr资源| 91精品国产高清| 精品国产九九九| 国产精品视频免费| 日本a视频在线观看| 日本成人一区二区| 亚洲欧美三级在线| 日本三级黄色大片| 国产精品一色哟哟哟| 视频一区视频二区视频三区高| 2001个疯子在线观看| 日韩一区二区三区在线视频| 99精品全国免费观看| 午夜在线视频观看日韩17c| 98国产高清一区| 国产网友自拍视频导航网站在线观看| 色婷婷综合久久久久中文 | 国产精品久久看| 精品久久久久久久免费人妻| 91大神精品| 欧美精品免费在线观看| 91免费视频播放| 中文字幕精品综合| 91淫黄看大片| 国产一区二区亚洲| 日韩av电影院| 酒色婷婷桃色成人免费av网| 偷拍一区二区三区四区| av av在线| 亚洲日本欧美| 好看的日韩精品| 99在线视频影院| 亚洲国产精品成人av| 久久高清免费视频| 成人av中文字幕| 3d动漫一区二区三区| 精品福利网址导航| 91av网站在线播放| 青青青草原在线| 一本一道综合狠狠老| 伊人网在线视频观看| 日韩成人一区二区| 亚洲巨乳在线观看| www.成人在线.com| 精品中文字幕在线| 色呦呦中文字幕| 精品久久中文字幕久久av| 538国产视频| 天堂va蜜桃一区二区三区漫画版| 日韩av电影免费观看| 成人日韩在线| xxxxx成人.com| www.色亚洲| 激情av一区二区| 久久丫精品国产亚洲av不卡| 日韩和的一区二区| 亚洲人一区二区| 欧美成人一级| 97精品免费视频| 国产日产精品久久久久久婷婷| 欧美日韩在线亚洲一区蜜芽| 午夜精品福利在线视频| 国产91高潮流白浆在线麻豆| 成人在线免费观看av| 欧美一区二区三区激情视频| 亚洲va男人天堂| av女在线播放| 在线精品视频视频中文字幕| 国产高清视频免费观看| 福利一区福利二区微拍刺激| 亚洲无人区码一码二码三码的含义 | 亚洲欧洲精品一区二区精品久久久 | www..com国产| 中文字幕久久午夜不卡| 日本中文字幕精品| 久久精品30| 裸体裸乳免费看| 小说区图片区色综合区| 成人午夜在线观看| 日韩精品美女| 欧美成人免费观看| 青青草免费观看免费视频在线| 欧美日韩国产高清一区| 国产一级做a爱片久久毛片a| 国产精品人人做人人爽人人添| 95视频在线观看| 麻豆成人免费电影| 免费无码不卡视频在线观看| 91精品国产自产拍在线观看蜜| 久久精品日韩| 日韩精品一区二区三区中文字幕 | 免费高清在线观看免费| 国产精品久久久乱弄 | 国产在线98福利播放视频| 1区2区在线| 久久综合久久美利坚合众国| 九九热视频在线观看| 日韩欧美国产精品| 中文字幕视频一区二区| 狠狠爱在线视频一区| 久久久久无码国产精品| 中文字幕一区二| 欧美做受高潮6| 99久久婷婷国产综合精品电影 | 久久久999成人| 精品久久av| 亚洲国产另类 国产精品国产免费| 中文字幕在线2018| 色哟哟欧美精品| 91在线看视频| 亚洲国产精品人人做人人爽| 欧美第一页在线观看| 欧美激情一区二区三区全黄 | 久草在线成人| 精品在线不卡| 久久精品福利| 国产精品免费看一区二区三区| 成人污版视频| 成人国产在线视频| 久久人体av| 国产精品久久久久久久久久尿 | 欧美视频福利| 国产经典久久久| 亚洲成av人片一区二区密柚| 亚洲精品国产精品久久| 国产一区二区三区91| 欧美精品中文字幕一区二区| 无码日韩精品一区二区免费| 精品免费一区二区三区蜜桃| 国产伦乱精品| 国产免费高清一区| 国产在线播放精品| 国产精品加勒比| 久久九九热re6这里有精品| 国产成人精品日本亚洲11| 九九九九九九精品任你躁 | 中国av一区| 欧洲一区二区日韩在线视频观看免费 | 91麻豆精品成人一区二区| 久久久久久久电影| 99久久久无码国产精品性 | 黄色小视频在线免费看| 亚洲一二三区不卡| 国产真人真事毛片| 精品久久久久久久久久| 精品国产一区二区三区四| 色欧美日韩亚洲| 在线观看免费视频a| 91精品国产色综合久久不卡蜜臀 | 国产精品xxxav免费视频| 国产亚洲精品久久飘花| 日韩av中文字幕一区| 欧美一区二区三区四区在线观看地址 | 国产精品毛片一区二区在线看舒淇 | 亚洲韩国精品一区| 日韩在线观看第一页| 日本道免费精品一区二区三区| 免费av中文字幕| 6080亚洲精品一区二区| 理论片中文字幕| 亚洲人av在线影院| 免费在线观看av| 久久久久久有精品国产| 在线成人av观看| 国产欧美日韩中文字幕在线| 一区二区三区在线资源| 精品一区二区三区日本| 日韩精品免费一区二区三区| 免费cad大片在线观看| 国产欧美91| 国产一级片自拍| 从欧美一区二区三区| mm131丰满少妇人体欣赏图| 亚洲视频在线一区二区| 日产精品久久久久| 欧美午夜精品一区| 亚洲不卡免费视频| 亚洲天堂网在线观看| 直接在线观看的三级网址| 2018国产精品视频| 91麻豆精品| 久久久久久久久久久久久久一区| 久久要要av| 国产成人无码精品久久久性色| 麻豆成人av在线| 懂色av粉嫩av蜜乳av| 中文字幕视频一区| 啦啦啦免费高清视频在线观看| 8v天堂国产在线一区二区| 天天综合网在线| 超在线视频97| 亚洲www啪成人一区二区| 成人国产1314www色视频| 日韩三级在线| 18禁男女爽爽爽午夜网站免费| 国产精品91xxx| 毛片aaaaaa| 一本大道av一区二区在线播放| 国产wwwwwww| 色综久久综合桃花网| 欧美xo影院| 韩国成人av| 欧美日本中文| 手机免费av片| 国产欧美日韩视频一区二区| 日本少妇xxxx动漫| 欧美一级高清大全免费观看| av在线日韩国产精品| 日韩av片永久免费网站| 成人三级av在线| 日韩精品福利片午夜免费观看| 日本不卡免费在线视频| 免费a在线观看播放| 亚洲综合免费观看高清完整版在线| 亚洲一卡二卡在线观看| 亚洲视频一区二区三区| 麻豆mv在线看| 国产一区二区不卡视频| 在线视频观看日韩| 免费观看污网站| 亚洲一区二区在线播放相泽| 99国产精品一区二区三区 | 日本视频一区二区不卡| 男人的天堂亚洲在线| 中文字幕av观看| 日韩欧美在线看| 久久精品色图| 国产不卡在线观看| 国产精品片aa在线观看| 国产熟女高潮视频| 久久久久久毛片| 免费观看日批视频| 伊人久久久久久久久久久久久| 亚洲第一二三四区| 日本一区视频在线播放| 爽好久久久欧美精品| 特级西西www444人体聚色 | 高潮一区二区三区乱码| 久久久久久久久久久成人| 成人台湾亚洲精品一区二区 | 国产在线看一区| 国产女人被狂躁到高潮小说| 日韩你懂的在线观看| 丁香花在线观看完整版电影| 国产一区二区自拍| 欧美亚洲一区| 美国美女黄色片| 在线不卡中文字幕播放| av网站大全在线| 国产精品视频入口| 久久亚洲一区| 刘亦菲国产毛片bd| 欧美一区二区三区喷汁尤物| 黄色的视频在线观看| 精品一区久久久| 美女视频网站久久| 欧美久久久久久久久久久久| 亚洲电影中文字幕| 成人自拍av| 国产人妻互换一区二区| 成人性视频免费网站| 特黄视频免费看| www.亚洲免费视频| 深夜福利一区| 毛片av免费在线观看| 1000部国产精品成人观看| www.日韩高清| 国产福利成人在线| 一区二区三区中文| 精品人妻一区二区免费视频| 欧美亚洲一区三区| 丝袜美腿av在线| 欧美亚洲另类久久综合| 久久成人免费网| 国产小视频在线免费观看| 国产一区二区黑人欧美xxxx| 亚洲福利合集| 国产精品涩涩涩视频网站| 亚洲天天做日日做天天谢日日欢| 污污的视频网站在线观看| 国产欧美精品一区二区| 在线成人h网| 欧洲美女女同性互添| 亚洲精品国产精品国产自| 24小时成人在线视频| 俄罗斯av网站| 亚洲激情自拍偷拍| 国产在线你懂得| 国产精品一区二区三区精品| 六月丁香婷婷色狠狠久久|