[英]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.