1、二进制下用1表示真,0表示假,则异或的运算法则为:0异或0=0,1异或0=1,0异或1=1,1异或1=0,这些法则与加法是相同的,只是不带进位。 1. a b = b a 2. a b c = a (b c) = (a b) c; 3. d = a b c 可以推出 a = d b c. 4. a b a = b. x是二进制数0101 y是二进制数1011 则结果为xy=1110 00=0 01=1 10=1 11=0 只有在两个比较的位不同时其结果是1,否则结果为0 即“相同为0,不同为1”! 真真=假 或者为: True False = True False True = True Fa
2、lse False = False True True = False 部分计算机语言用1表示真,用0表示假,所以两个字节按位异或如下 00000000 = 00000000 =我是分界线= 11111111 异或 00000000 = 11111111 异或1 的配对性定理: 设a为任意非负偶数,b=a+1为比a大1的正奇数;则必有a1=b,b1=a; 用于处理两两配对问题(如正向、反向边)时很好用! 如 a=2,b=3:21=3,31=2; 981=99;991=98; 1231=122; 98701=9871 如a=0,b=1: 01=1,11=0; 证明: 由异或的自反性abb=a0=
3、a,可知a11=a; 又因为对于任意非负偶数有a1=a+1; 所以有: a1=a+1=b; a11=(a+1)1=b1=a; 异或的性质及运用 异或是一种基于二进制的位运算,用符号XOR或者 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结果为0。 简单理解就是不进位加法,如1+1=0,,0+0=0,1+0=1。 性质 1、交换律 2、结合律(即(ab)c = a(bc) 3、对于任何数x,都有xx=0,x0=x 4、自反性 A XOR B XOR B = A xor 0 = A 异或运算最常见
4、于多项式除法,不过它最重要的性质还是自反性:A XOR B XOR B = A,即对给定的数A,用同样的运算因子(B)作两次异或运算后仍得到A 本身。这是一个神奇的性质,利用这个性质,可以获得许多有趣的应用。 例如,所有的程序教科书都会向初学者指出,要交换两个变量的值,必须要引入一个中间变量。但如果使用异或,就可以节约一个变量的存储空间: 设有A,B两个变量,存储的值分别为a,b,则以下三行表达式将互换他们的值 表达式 (值) : 类似地,该运算还可以应用在加密,数据传输,校验等等许多领域。 运用距离: 1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现 一次。
5、每个数组元素只能访问一次,一个算法,将它找出来;不用辅助存储空 间,能否设计一个算法实现? 解法一、显然已经有人提出了一个比较精彩的解法,将所有数加起来,减去1+2+.+1000的和。 这个算法已经足够完美了,相信出题者的标准答案也就是这个算法,唯一的问题是,如果数列过大,则可能会导致溢出。 解法二、异或就没有这个问题,并且性能更好。 将所有的数全部异或,得到的结果与123.1000的结果进行异或,得到的结果就是重复数。 但是这个算法虽然很简单,但证明起来并不是一件容易的事情。这与异或运算的几个特性有关系。 首先是异或运算满足交换律、结合律。 所以,12.n.n.1000,无论这两个n出现在什
6、么位置,都可以转换成为12.1000(nn)的形式。 其次,对于任何数x,都有xx=0,x0=x。 所以12.n.n.1000 = 12.1000(nn)= 12.10000 = 12.1000(即序列中除了n的所有数的异或)。 令,12.1000(序列中不包含n)的结果为T 则12.1000(序列中包含n)的结果就是Tn。 T(Tn)=n。 所以,将所有的数全部异或,得到的结果与123.1000的结果进行异或,得到的结果就是重复数。 当然有人会说,1+2+.+1000的结果有高斯定律可以快速计算,但实际上12.1000的结果也是有规律的,算法比高斯定律还该简单的多。 google面的变形:一
7、个数组存放若干整数,一个数出现奇数次,其余数均出现偶数次,找出这个出现奇数次的数? 解法有很多,但是最好的和上面一样,就是把所有数异或,最后结构就是要找的,原理同上! longzxr.i.sohu./blog/view/190676432.htm 奇数个异或是本身,偶数个是0;0a=a;异或有交换律 异或 的几个作用 一、交换两个整数的值而不必用第三个参数 a = 9; b = 11; a=ab; 10011011=0010 b=ba; 10110010=1001 00101001=1011 a = 11; b = 9; 二、奇偶判断 a操作就是将a中的每一位按位逐一进行异或,例如a=4b10
8、10,则 b=1010=0,由此可以判断a中为1的位数是奇数还是偶数,是一个便捷的操作。 三、格雷码(Gray code) 格雷码(Gray code)是由贝尔实验室的Frank Gray在1940年提出,用于在PCM(Pusle Code Modulation)方法传送讯号时防止出错,并于1953年三月十七日取得美国专利。格雷码是一个数列集合,相邻两数间只有一个位元改变,为无权数码,且格雷码的顺序不是唯一的。 直接排列 以二进制为0值的格雷码为第零项,第一项改变最右边的位元,第二项改变右起第一个为1的位元的左边位元,第三、四项方法同第一、二项,如此反覆,即可排列出n个位元的格雷码。 1、自然
9、二进制码转换成二进制格雷码 自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。 2、二进制格雷码转换成自然二进制码 二进制格雷码转换成自然二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。 二进制数转格雷码 (假设以二进制为0的值做为格雷码的0) 格雷码第n位 = 二进制码第(n+1)位+二进制码第n位。不必理会进制。Verilog 代码:gray=
10、(binary1)binary; 格雷码转二进制数 二进制码第n位 = 二进制码第(n+1)位+格雷码第n位。因为二进制码和格雷码皆有相同位数,所以二进制码可从最高位的左边位元取0,以进行计算。 verilog代码:/-假设reg n-1 gray,binary; integeri; for(i=0;ii)/gray移位后,自身按位异或 放一段代码这,用于参考: /*Logic to convert binary numbers into Gray coded binary numbers is implemented in the following Verilog Code. */ mod
11、ule binary2gray(); reg clk; reg rstn; reg 5:0 counter_binary, counter_binary_reg, counter_gray, counter_gray_reg; integer count, file_wr; /* Initial block to generate clock and reset */ initial begin clk = 0; rstn = 0; #100 rstn = 1; forever begin #10 clk = !clk; end end /* Synchronous Logic for reg
12、istering the data and incrementing the counter for binary data */ always (posedge clk or negedge rstn) begin if (!rstn) begin counter_binary_reg = b0; counter_gray_reg 0; i = i - 1) binary2grayi-1 = valuei valuei - 1; endfunction /* Get gray encoded output */ always (*) counter_gray = counter_gray_r
13、eg; counter_binary = counter_binary_reg; counter_gray = binary2gray(counter_binary_reg); end endmodule 四、奇数分频 奇数分频电路: 奇数分频电路常用的是错位“异或”法的原理。如进行三分频,通过待分频时钟的上升沿触发计数器进行模三技术,当计数器计数到邻近值进行两次翻转。比如计数器在计数到1时,输出时钟进行翻转,计数到2时再进行翻转,即在邻近的1和2时刻进行两次翻转。这样实现的三分频占空比为1/3或2/3.如果要实现占空比为50%的三分频时钟,可通过待分频的时钟上升沿触发计数器和下降沿触发计数器进行三分频,然后将上升沿和下降沿产生的三分频时钟进行相或预算,即可得到占空比为50%的三分频时钟。 错位“异或”法推广: 对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发的模N计数,计数到某一选定值时,进行输出时钟翻转,然后进过(N-1)/2再次进行翻转得到一个占空比非50%的技术分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同时,进行输出时钟翻转,同样经过(n-1)/2时,输出时钟再次翻转生成占空比非50%的奇数N分频时钟。两个占空比非50%的时钟相或运算,得到占空比为50%的奇数N分频时钟。 内容仅供参考
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1