[英]Solidity: What does the caret ^ operator do?
我搜索了 solidity 文檔,沒有關於此的內容:
插入符號 ^ 運算符的作用是什么?
它在這里做什么?
sha3(sha3(valueA) ^ sha3(valueB))
根據https://www.tutorialspoint.com/solidity/solidity_operators.htm (通過 Google,順便說一句),在許多語言中,它意味着 XOR(異或):
x y x^y
0 0 0
0 1 1
1 0 1
0 0 1
(1=True; 0=False)
這是一個按位運算,異或(異或): https : //docs.soliditylang.org/en/v0.8.6/types.html
“按位異或是一種二元運算,它采用兩個等長的位模式,並對每對對應位執行邏輯異或運算。如果只有一個位為 1,則每個位置的結果為 1,但將為 0如果兩者都是 0 或兩者都是 1。” https://en.wikipedia.org/wiki/Bitwise_operation#:~:text=A%20bitwise%20XOR%20is%20a,0%20or%20both%20are%201 。
我遺漏的關鍵字是“按位”(如 Nathan 提到的)。
So, if, for example, sha3(valueA)=0x44=0b01000100, and
sha3(valueB)=0x34=0b00110100, then:
(sha3(valueA)=0x44=0b01000100 and sha3(valueB))=0x70=0b01110000
PS有趣的事實:全1的異或是“位翻轉”
它是xor
或exclusive or
運算符。 如果輸入不同,則 output 為真,否則 output 為假。
1 xor 1 == 0 xor 0 = 0
1 xor 0 == 0 xor 1 = 1
XOR 加密算法是一種非常有效但易於實現的對稱加密方法。 由於其有效性和簡單性,XOR 加密是當今使用的更復雜的加密算法中使用的極其常見的組件。
XOR 加密算法是對稱加密的一個示例,其中使用相同的密鑰來加密和解密消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.