利用异或交换两个变量数值的原理

1540 2021-11-27 11:19

首先这个骚操作和原码、反码、补码没有卵的关系。

然后异或这个概念只有计算机二进制里面才有:

性质一:两个值相同,那么异或就是0;两个值不同,那么异或就是1。这里仅仅代表一个bit,也就是说真代表有差异、假代表相同。

性质二:一个数的每个bit位与0异或,不会改变;一个数的每个bit位与1异或,每个码位都会改变。这里面的数是换算成二进制bit位之前的数。

任何一位二进制数同 1 异或都会变成另外一个(0 同 1 异或的结果是 1,1 同 1 异或的结果是 0)

任何一位二进制数同 0 异或都保持不变(0 同 0 异或的结果是 0,1 同 0 异或的结果是 1)

那么将两个数转换成计算机二进制存储,将这两个数异或,利用性质一就可以得到一个判断他们差异的码位记录,根据这个记录,拿到一个数,再利用性质二和这个数就可以变成另一个数。

 

布尔用数学方法研究逻辑问题

二进制的世界就是这么简单又基础。

“与门”就是有0出0,全1出1

“或门”就是有1出1,全0出0

“非门”就是反相

复合逻辑中

“与非”——全1出0,有0出1

“或非”——全0出1,有1出0

“异或”——相同出0,不同出1

 

整个原理又和相加可以交换两数殊途同归的感觉。两个数相加得到一个记录,用这个记录减其中一个数得到另一个数,再用记录减得到的这个数,可得另一个数。

 

大型用途:raid5 奇偶校验

全部评论

·