今天这篇有一点不好理解,喜欢思考难题的小伙伴往下看。
看技术书籍的时候,看到这样一个论断:一个数对另一个数做2次异或运算,还等于其本身。
什么意思呢?
首先要知道什么是抑或,这是在初级编程和代数里面都会提到的概念。
抑或(以xor来表示),是一种需要两个操作数的运算符。
两个变量a与b的抑或运算结果,如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
这种逻辑运算,更加适用于计算机的二进制世界,非黑即白,非0即1。
1 xor 0 = 1;
0 xor 1 = 1;
1 xor 1 = 0;
0 xor 0 = 0;
到这里非常容易理解,但是那个论断就不那么容易理解了。
一个数,对另一个数做两次抑或运算,结果还等于这个数本身。
也就是说,(a xor b)xor b = a;
很神奇,为什么呢?
随便去两个数字去试,确实是这样,比如x=0b1101;y=0b0011(0b表示这个数字是二进制,这个例子中x、y都是4位的二进制数)
x xor y = 0b1110;
(x xor y) xor y = 0b1101 = x;
虽然想不清楚为什么,但是感觉其中一定有非常玄妙的深意。
书中举了这个例子的两个应用。
一个是加密,在第三方不知道加密算法的情况下,你将你的秘钥与某串数字做异或后,通过网络交给你想交给的对象,这样即使别人通过破解网络得到了你交给他的数字,也无法得知真正的密码。
这个时候,对方就可以用预先与你约定好的数字进行异或,也就实现了一个解密过程。
另一个例子,用于编程中的交换两个变量的数值。
a = a xor b;
b = a xor b;
a = a xor b;
这样简单的三行运算,a和b的值就实现了交换。
在易经中,如果以1表示阳爻,以0表示银爻。
有了这个异或的规律,再去看对卦和变卦,会不会有什么启发?
(好吧,其实是今天没什么好写的了……就这样吧)
![](https://img.haomeiwen.com/i3973919/78f9aeaea381e64d.png)
网友评论