之前聽數邏老師說 NOR NAND 邏輯才是萬用邏輯(NOR NAND大多用在硬體設計或邏輯設計)。但現在進入軟體的時代時,XOR反而變成一個十分重要的邏輯。幾乎所有演算法多少都有他的觀念 (分析,儲存,排列,合併,搜尋)。
可說是軟體界的萬用邏輯
電腦都是以2進位運算,可用2進位來做很多事情(MSB)……<2N次方>,<2的0次方=1>(LSB)
數列 | bin |
---|---|
1st | 001 |
2nd | 010 |
3rd | 011 |
4th | 100 |
...... | …… |
真值表 | XOR |
---|---|
00 | 0 |
01 | 1 |
10 | 1 |
11 | 0 |
一樣數字就0,不一樣就1 |
真值表 | XOR | 真值表 | XOR
------------- | -------------
000 | 0 | 100 | 1
001 | 1 | 101 | 0
010 | 1 | 110 | 0
011 | 0 | 111 | 1
奇數個1輸出1,反之就是0
有時資料多會變成所謂的匯流排(bus) 這時就要透過邏輯決定哪些資料要進出。
ps:程式邏輯都是以2進位去計算 輸出會再轉成10進位
Ex:(邏輯運算) AND= & OR= | XOR= ^
a , b ,c , d , e = 18 ,8 ,0xc , 0b110 , 0o777
print(a&b&c)
print(c&d&e)
print(a|b|c)
print(c|d|e)
print(a^b^c)
print(c^d^e)
XOR密碼是個非常簡單的加密方式 它運算過程中會產生一組key(密碼)來對應原有的資料 可做一次性加密
假如有一純數字資料:872590
隨機(random) 產生密碼:514872
對這兩個數列互斥或(XOR)
print(872590^514872)
得到 691126 這串數字
我們再對這串數字做反運算
print(691126^514872)
發現變成原有的純數字資料了 872590
由此可發現XOR可具有簡單的加密,相當於先XOR產生一則密文。之後再透過密碼解密 就可以得到原有資料
ps:以明文稱未修改過原資料或可讀取的訊息
Ex:(做個簡單xor程式)
def encode():
key = int(input("輸入自訂密碼"))
msg = int(input("填入要加密的資料"))
return key^msg
'''
'''
def decode():
dekey = int(input("輸入密碼"))
pwdmsg = int(input("加密的資料"))
return dekey^pwdmsg