艾巴生活网

您现在的位置是:主页>科技 >内容

科技

异或运算法则(异或运算规则及其应用详解)

2023-08-10 19:47:01科技帅气的蚂蚁
XOR运算简介XOR运算一般指异或。英语中ExclusiveOR,缩写为xor。异或(xor)是一种数学运算符。它适用于逻辑运算。异或的数学符号是"电

异或运算法则(异或运算规则及其应用详解)

XOR运算简介XOR运算一般指异或。英语中ExclusiveOR,缩写为xor。异或(xor)是一种数学运算符。它适用于逻辑运算。异或的数学符号是"电脑符号是XOR 。算法是:

ab=( ab)(a b)

如果A和B的值不同,则XOR结果为1。如果A和B的值相同,则异或结果为0。

异或也叫半加运算,它的算法等价于不进位的二进制加法:在二进制中,1代表真,0代表假,所以异或的算法是:00=0、10=1、11=0(都是0,差是0)

异或被称为异或,EOR和异或。

程序中有三个运算符:异或、异或和.

用法如下

z=xy

z=xxory

1.aa=0异或运算规则

2.ab=ba

3.abc=a(bc)=(ab)c;

4.d=abc可以从A=D推导出bc .

5.aba=b.

6.如果x是二进制数0101,y是二进制数1011;

Xy=1110

当只有两个比较位不同时,结果为1,否则结果为0。

即当两个输入相同时,它是0,但当它们不同时,它是1 !

异或运算的功能在计算机中应用广泛。xor的逻辑符号通常是XOR,但它也很有用:

真/假=真

假/真=真

假/假=假

真/真=假

或者:

TrueFalse=True

FalseTrue=True

FalseFalse=False

TrueTrue=False

有些计算机语言用1表示真,用0表示假,所以这两个字节的按位异或如下

下面是两个用于异或计算的二进制值:

在现实中,所有的十进制值都被使用,所以让让我们看看两个十进制值是如何异或的:

53=?

1.在异或计算之前,这些值将被转换为二进制:

而5和3转换成二进制,分别是0101、0011。

2.将结果0110再次转换为十进制:6

3.所以53=6

xor的巧妙运用不同于其他语言。C语言和C语言的异或不用异或,而是用"打字方式是Shift 6。("在其他语言中一般表示权力)

如果需要交换两个变量的值,除了常用的中间变量,还可以使用XOR只交换两个变量,比如:

这就完成了A和b的交换。

综上所述,同一个变量与另一个变量的异或,其异或值等于另一个数,如(a b) a=b。

用例:可用于加密算法的一个或多个环节,使算法更复杂,更难被破解,更安全。

XOR经典应用运算中涉及的两个值。如果两个对应的位相同,则结果为0,否则为1。

即:

0^0=0,

1^0=1,

0^1=1,

1^1=0

例如:10100001 0001001=10110000

按位异或的三个特点:(1)0=0,0 1=10异或任意数=任意数

(2) 1 0=1,1 1=01异或任意数——任意数取反。

(3)任意数异或自身=设置自身为0。

按位异或的几种常见用法:(1)翻转一些特定的位

例如,如果对数10100001的第2位和第3位反转,则该数可以与0000110进行按位异或运算。

10100001^00000110=10100111

(2)不使用临时变量实现两个值的交换。

例如,交换两个整数a=10100001和B=0000110的值可以通过以下语句实现:

a=a^b;//a=10100111

b=b^a;//b=10100001

a=a^b;//a=00000110

////////////////////////////////////////////////////////////

两个变量之间交换值的方法[http://blog.sina.com.cn/s/blog_676015470100izpg.html]

第一种方法,你将使用第三个变量来实现:

例如C=A;a=B;b=C;

这个方法需要第三个变量的帮助;

第二种方法是通过加法和减法交换两个变量,

例如A=A B;b=A-B;a=A-B;

第三种方法是通过比特异或运算实现的,也是效率最高的一种。在大量数据交换时,效率明显优于前两种方法。

例如a=a b;b=a^b;a=a^b;

原理:用一个数异或本身等于0,异或运算符合汇率。

PS:还有一篇更深刻的关于交换价值的文章。作者的研究精神值得学习:

http://rednaxelafx.javaeye.com/blog/134002

/////////////////////////////////////////////////////////////

(3)在汇编语言中经常用于将变量置零:

xora,a

(4)快速判断两个值是否相等

举例1:判断两个整数甲,乙是否相等,则可通过下列语句实现:

return((a^b)==0)

举例2:Linux中最初的ipv6地址等于()函数的实现如下:

staticinlinitipv 6 _ addr _ equal(构造6 _ addr * a1,构造6 _ addr * a2)

{

return(a1-》S6 _ addr 32[0]==a2-》S6 _ addr 32[0]

a1-》S6 _ addr 32[1]==a2-》S6 _ addr 32[1]

a1-》S6 _ addr 32[2]==a2-》S6 _ addr 32[2]

a1-》S6 _ addr 32[3]==a2-》S6 _ addr 32[3]);

}

可以利用按位异或实现快速比较,最新的实现已经修改为:

staticinlinitipv 6 _ addr _ equal(构造6 _ addr * a1,构造6 _ addr * a2)

{

return(((a1-》s6_addr32[0]^a2-》s6_addr32[0])|

(a1-》s6_addr32[1]^a2-》s6_addr32[1])|

(a1-》s6_addr32[2]^a2-》s6_addr32[2])|

(a1-》s6_addr32[3]^a2-》s6_addr32[3]))==0);

}