你不知道的异或运算符

503 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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 的真值表如下:

pq^
TTF
TFT
FTT
FFF

由上可以得出结论:

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,然后使用异或运算符就可以实现一个加密解密的操作。以后有人在问对称加密的原理可以做到胸有成竹了。