iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 9
1
自我挑戰組

從寫程式到脫離菜雞的歷練(以python為主的資處與檔案權限)系列 第 9

[D9] 軟體der萬用邏輯XOR

之前聽數邏老師說 NOR NAND 邏輯才是萬用邏輯(NOR NAND大多用在硬體設計或邏輯設計)。但現在進入軟體的時代時,XOR反而變成一個十分重要的邏輯。幾乎所有演算法多少都有他的觀念 (分析,儲存,排列,合併,搜尋)。
可說是軟體界的萬用邏輯


  • Xor規則

電腦都是以2進位運算,可用2進位來做很多事情
(MSB)……<2N次方>,<2的0次方=1>(LSB)

數列 bin
1st 001
2nd 010
3rd 011
4th 100
...... ……

二元XOR

真值表 XOR
00 0
01 1
10 1
11 0
一樣數字就0,不一樣就1

多元XOR

真值表 | 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密碼

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

上一篇
[D8] python排序(sort)和引入方式
下一篇
[D10] python二進位運算
系列文
從寫程式到脫離菜雞的歷練(以python為主的資處與檔案權限)32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言