携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情 >>
一、什么是异或运算符?
异或,英文为exclusive OR,缩写成xor异或(xor)是一个数学运算符,应用于逻辑运算。
1.1 异或运算的表示形式
| 名称 | 符号 |
|---|---|
| 数学符号 | + |
| 英文简称 | xor |
| 程序符号 | ‘^’ |
1.2 异或运算算法则
- 归零律:p ⊕ p = 0
- 恒等律:p ⊕ 0 = p
- 交换律:p ⊕ q = q ⊕ p
- 结合律:p ⊕ (q ⊕ r) = (p ⊕ q) ⊕ r
- 自反:p ⊕ q ⊕ q = p ⊕ 0 = p
1.3 异或运算的真值表
异或运算 p ^ q 的真值表如下:
| p | q | ^ |
|---|---|---|
| T | T | F |
| T | F | T |
| F | T | T |
| F | F | F |
由上可以得出结论:
1、任何一个数与 自身 异或值为 0 即 F(false)
2、任何一个数与 0 异或值为 自身
简单理解就是不进位的加法运算,如下:
7 ^ 15 = 8
0000 0111
^ 0000 1111
------------
0000 1000
// 因为2进制加法中,逢2进1 但是这边我们采用不进位的加法
二、异或运算符有哪些应用?
现代的密码都是建立在计算机的基础上,这是因为现代的密码所处理的数据量非常大,而且密码算法也非常复杂,不借助计算机的力量就无法完成加密和解密的操作。而在计算机的操作对象并不是文字,而是由 0 和 1 组成的二进制数据排列而成。无论是文字、图片、声音、视频还是程序,在计算机中都是用二进制方式来表示的。执行加密操作的程序,就是将表示明文的数据表示密文的数据。
这里我们来看一个异或运算的示例:
0 1 0 0 1 1 0 0 // A
^ 1 0 1 0 1 0 1 0 // key
--------------------
1 1 1 0 0 1 1 0 //(A ^ key)的结果
^ 1 0 1 0 1 0 1 0 // key
--------------------
0 1 0 0 1 1 0 0 // A
步骤如下:
- 将明文 A 用密钥 key 进行加密,得到密文 A ^ key
- 将密文 A ^ key 的结果异或密钥 key 进行解密,得到明文 A
通过上面的简单例子可以发现,只要选择一个合适的 key,然后使用异或运算符就可以实现一个加密解密的操作。以后有人在问对称加密的原理可以做到胸有成竹了。