首页>>科技 >>内容

异或和怎么算,异或运算规则及其应用详解

发布时间:2023-10-26 18:18:17编辑:温柔的背包来源:

很多朋友对异或和怎么算,异或运算规则及其应用详解不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

异或和怎么算,异或运算规则及其应用详解

XOR运算简介XOR运算一般指异或。英语是exclusiveOR,缩写为xor。Xor是一种数学运算符。它适用于逻辑运算。异或的数学符号是“”,计算机符号是“异或”。算法为:a b=(a b) (a b)如果a和b的值不同,则异或结果为1。如果a和b的值相同,则异或结果为0。

异或也叫半加,它的算法相当于没有进位的二进制加法:在二进制中,1代表真,0代表假,那么异或算法就是:00=0,10=1,01=1,11=0(同为0,异为0。异或被称为异或,EOR和异或。程序中有三种运算符:异或、异或和.用法如下:z=xyz=xxory异或运算规则1。 A=02。b=a3。A B C=A (B C)=(A

4.d=abc可以推导出A=D B C.5.A B A=B.6 .如果x是二进制数0101,y是二进制数1011;Xy=1110只有当两个比较的位不同时,结果才是1,否则结果是0,即“两个输入相同时为0,不同时为1”!异或运算的功能在计算机中应用广泛。异或的逻辑符号一般是异或,也有用:真假=真假=假假=真假=假或真假=真。

有些计算机语言用1表示真,用0表示假,所以两个字节的按位异或如下:现实中用的都是十进制值,那么我们来看看两个十进制值是怎么异或的:53=?1.在进行异或运算之前,所有的值都会转换成二进制:5和3分别转换成二进制:0101、00112。那么结果0110就会转换成十进制:63。所以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 0001=10110000按位异或的三个特征:(1) 0 0=0,01=10异或任意数=

按位异或的几种常见用法如下:(1)如果某些特定位是反位的,比如对数10100001的第二位和第三位,那么这个数可以与00000110进行按位异或。10100001 0000110=10100111 (2)不使用临时变量交换两个值。例如,交换两个整数a=10100001和B=0000110的值可以通过以下语句实现:A=A B;//a=10100111b=b^a;//b=10100001a=a^b;//a=000000110//////////////////////////////////////////////

两个变量之间交换值的方法【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:还有一篇更深刻的文章,讨论的是价值观的交换。作者的研究精神是xora learning:http://rednaxelafx . javaeye . com/blog/134002///////////////////////////////。

Example 2: The original ipv6 address equals () function in 2:Linux is implemented as follows: staticinlineintiipv6 _ addr _ equal (const struction 6 _ addr * a1, const struction 6 _ addr * a2){ return(a1-》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 _ addr32 [2] A1-"S6 _ addr32 [3]} can be compared quickly by bitwise XOR, and the latest implementation has been modified to:

staticinlineintipv6_addr_equal(conststructin6_addr*a1,conststructin6_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);}

以上知识分享希望能够帮助到大家!