异或运算法则(异或运算规则及其应用详解)
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);
}
- 上一篇:isp客户是什么意思,isp是什么意思网络
- 下一篇:live照片是什么意思
推荐阅读
- 如何涂指甲油,怎样涂指甲油干得快
- 纪念碑谷艾达的梦攻略第四关,纪念碑谷艾达的梦攻略
- udk虚幻4引擎(游戏开发包工具)软件介绍(udk虚幻4引擎(游戏开发包工具))
- OG梅奥为什么离开nba Pubmed GIST文献月评第十九期(Jun 2018)
- 12306用户名和密码忘记怎么找回账号,12306用户名和密码忘记怎么找回
- 哈尔滨市极乐寺简介
- 二人麻将打法技巧,迅速如何掌握二人麻将技巧
- 故宫门票多少钱一张2021,故宫门票多少钱
- 如何删除微信中的表情包,微信如何删除自己保存的表情
- dnf已经有红字的怎么把红字洗掉,dnf已经洗出红字的装备怎么洗掉
- 海蛏子的家常做法,海蛏子的做法大全
- 微信聊天记录怎么恢复吗,微信聊天记录怎么恢复方法:
- qq飞车帧数如何能锁,QQ飞车帧数如何修改
- 1盎司相当于多少克黄金,盎司等于多少克及一盎司黄金等于多少克
- 怎么恢复路由器出厂,怎样恢复路由器出厂设置
- 触手tvlogo怎么买,如何录制触手TV文章
- 藏语常用问候语及礼貌语 旅行必备
- 腾讯文章的会员怎么取消自动续费,腾讯文章VIP会员怎么取消自动续费设置
- 支付宝绑定银行卡与银行预留手机号不符,支付宝绑定银行卡提示与预留手机号码不一致
- 如何饲养土狗,饲养土狗的实用方法