利用异或交换两个变量数值的原理
1508 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 奇偶校验
全部评论