美文网首页
异或运算(^、xor)

异或运算(^、xor)

作者: 笑对浮华 | 来源:发表于2021-05-08 15:38 被阅读0次

在编程中,想要交换A、B两个值,一般的做法都是开辟一个额外空间来存放A的值,将B的值放到A中,再将存放在额外空间中的值放到B中,这样完成一次A和B的交换。
那么为啥不直接将A的值放到B中,再将B的值放到A中呢?因为这样在第一次A的值放到B中,B的值已经被覆盖,此时B的值也变成A所存放的值了,所以最后的结果就是A和B中都是存放的A的值,B原先的值丢失了。
那么有没有方法不开辟额外的内存空间来完成一次交换呢?答案是可以的,使用异或运算,即下面这样,三行代码就可以完成:

a = a ^ b
b = a ^ b
a = a ^ b

这三行代码发生了什么事,既然能在不开辟额外空间的条件下完成a和b的互换?在这之前,先要明白异或运算的定义和它的一些特性:

异或运算:异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1)
特性1:0和任何数做异或运算都等于这个数本身,即0^N=N。
特性2:异或运算满足乘法和加法中的交换律,即a^b^c和c^b^a的结果是一样的。
特性3:一个运算式子中,偶数个相同数异或结果为0,奇数个相同数异或结果是这个数本身,即a^a^a^a=0,a^a^a=a。

搞清楚了异或运算的概念和一些特性后,回过头来看上面三行代码发生的过程:
第一行:a做了赋值运算,发生了改变,此时a记为a^b,b的值不变还是b;
第二行:a在第一行之后变为a^b, b做了赋值运算,此时b的值为a^b ^b,结合上面特性,此时b最终的结果为a;
第三行:b在第二行之后变成了a,a做赋值运算,此时a的值为a^b ^a,结合上面特性,a最终的运算结果为b。
以上就是三行代码发生的全过程,使用异或运算在不开辟额外空间的情况下就能交换两个值。

相关文章

  • 异或加密解密

    异或,英文为exclusive OR,或缩写成xor异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符...

  • 异或运算(^、xor)

    在编程中,想要交换A、B两个值,一般的做法都是开辟一个额外空间来存放A的值,将B的值放到A中,再将存放在额外空间中...

  • 异或运算是什么,看看大白话怎么说

    异或运算是编程中常见的一种运算,用^或XOR表示,它的基本运算法则如下: true XOR true = fals...

  • 【ShareCode】不错的技术文章 -- 如何使用异或(XOR

    如何使用异或(XOR)运算找到数组中缺失的数? 今天给大家分享一篇关于使用XOR(异或)运算找到数组中缺失的数的问...

  • XOR 加密

    原文地址 XOR运算 XOR运算,中文称为“异或运算”。 它的定义是:两个值相同时,返回false,否则返回tru...

  • 感知机不能解决异或(XOR)问题

    什么是异或(XOR) 异或:可以简称Xor,可以用数学符号⊕表示,计算机就一般可以用^表示了。 异或运算主要指二进...

  • 什么是异或_异或运算及异或运算的作用

    异或,是一个数学运算符,英文为exclusive OR,缩写为xor,应用于逻辑运算。异或的数学符号为“⊕”,计算...

  • TFLearn的简单实例

    通过使用TFLearn实现简单的逻辑非(NOT)、逻辑或(OR)、逻辑与(AND)和异或(XOR)运算符模型,我们...

  • 位运算

    (1)简介 位运算符(1)取反(NOT) (2)按位或(OR) (3)按位异或(XOR) (4)按位与(AND) ...

  • Feedforward Neural Network

    前言 前馈神经网络的目标是近似某个函数 。后面在围绕解释的也就是这个话题。 从XOR问题说起 xor(异或)运算...

网友评论

      本文标题:异或运算(^、xor)

      本文链接:https://www.haomeiwen.com/subject/eqmudltx.html