在各种
计算机语言中,如C、C++、java等,使用按位异或的思想执行的操作。
异或逻辑的关系是:当AB不同时,输出P=1;当AB相同时,输出P=0。“⊕”是异或数学运算符号,异或逻辑也是与或非逻辑的
组合,其
逻辑表达式为:P=A⊕B。在计算机语言中,异或的符号为” ^ “。
简介
异或操作就是在各种计算机语言中,如
C、
C++、
java等,使用按位异或的思想执行的操作。异或操作满足结合律和交换律,则由其性质可知,在计算机语言中,实现一些功能,例如参数的交换,奇偶性的判断等,使用异或操作就会变得非常简单。除此之外,还可以使用计算机语言进行其他更多的应用,接下来会对其作用做一些介绍。
运算法则
1)交换律:a ^ b = b ^ a。
2)结合律:a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
d = a ^ b ^ c 可以推出 a = d ^ b ^ c。
3)自反性:a ^ b ^ a = b。
异或运算最常见于
多项式除法,不过它最重要的性质还是自反性:
A^B^ B=A,即对给定的数A,用同样的运算因子(B)作两次异或运算后仍得到A本身。这是一个神奇的性质,利用这个性质,可以获得许多有趣的应用。例如,所有的程序教科书都会向初学者指出,要交换两个变量的值,必须要引入一个中间变量。但如果使用异或,就可以节约一个变量的存储空间:
设有A,B两个变量,存储的值分别为a,b,则以下三行表达式将互换他们的值表达式(值):
A=A^B(a^b);
B=B^A(b^a^b=a);
A=A^B(a^b^a=b)。
类似地,该运算还可以应用在加密,数据传输,校验等等许多领域。
x是二进制数0101;
y是二进制数1011;
则结果为x^y=1110;
0^0=0;0^1=1;1^0=1;1^1=0;
只有在两个比较的位不同时其结果是1,否则结果为0。
即“相同为0,不同为1”。
作用
在各种计算机语言中,异或操作通常用在位运算中。主要有如下几个作用:
交换参数值
例:a = 8;b = 12
a=a^b; 1000^1100=0100
b=b^a; 1100^0100=1000
a=a^b; 0100^1000=1100
则a = 12;b = 8
奇偶判断
^a操作就是将a中的每一位按位逐一进行
异或,例如a=1010,则b=1^0^1^0=0,由此可以判断a中为1的位数是奇数还是偶数。
格雷码
格雷码(Graycode)是由贝尔实验室的FrankGray在1940年提出,用于在PCM(PusleCodeModulation)方法传送讯号时防止出错,并于1953年三月十七日取得美国专利。格雷码是一个数列集合,相邻两数间只有一个位元改变,为无权数码,且格雷码的顺序不是唯一的。
以二进制为0值的格雷码为第零项,第一项改变最右边的位元,第二项改变右起第一个为1的位元的左边位元,第三、四项方法同第一、二项,如此反覆,即可排列出n个位元的格雷码。
自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。
2、二进制格雷码转换成自然二进制码
二进制格雷码转换成自然二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。
奇数分频
1、奇数分频电路:
奇数分频电路常用的是错位“异或”法的原理。如进行三分频,通过待分频时钟的上升沿触发计数器进行模三技术,当计数器计数到邻近值进行两次翻转。比如计数器在计数到1时,输出时钟进行翻转,计数到2时再进行翻转,即在邻近的1和2时刻进行两次翻转。这样实现的三分频占空比为1/3或2/3.如果要实现占空比为50%的三分频时钟,可通过待分频的时钟上升沿触发计数器和下降沿触发计数器进行三分频,然后将上升沿和下降沿产生的三分频时钟进行相或预算,即可得到占空比为50%的三分频时钟。
2、错位“异或”法推广:
对于实现
占空比为50%的N倍奇数分频,首先进行
上升沿触发的模N计数,计数到某一选定值时,进行输出时钟翻转,然后进过(N-1)/2再次进行翻转得到一个占空比非50%的技术分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同时,进行输出时钟翻转,同样经过(n-1)/2时,输出时钟再次翻转生成占空比非50%的奇数N分频时钟。两个占空比非50%的时钟相或运算,得到占空比为50%的奇数N分频时钟。