异或的妙用

原创 2007年09月21日 10:05:00

整理自csdn论坛里的一个帖子!

有两个文件A,B。
A文件中存储了N个整形数(N可能很大,里面的数可以重复)。
B文件比A文件少了一个数,其他的全部相同,但顺序不一样。
设计一个方法,判断B文件中比A文件少了哪个数。

思路:     int A = A1^A2^A3^...^An
              int B = B1^B2^B3...^Bn-1;
               那么所求的那个数
              int c= A^B.

程序:


#include <stdio.h>
void main()
{
    int A[]={1,2,3,4,5,6,7,8,9,10 ,9,8,7,6,5,4,3,2,1};
    int B[]={1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1,9};
 
    int x = 0;
    for( int i=0;i<19;++i)
    {
      x ^= A[i];
   }
   for( int j=0;j<18;++j)
   {
      x ^=B[j];
   }
     printf("%d/n",x);
}

异或还可用来交换两个整数的值时不用第三个参数.

如a=11,b=9.以下是二进制
a=a^b=1011^1001=0010;
b=b^a=1001^0010=1011;
a=a^b=0010^1011=1001;
这样一来a=9,b=11了。

比较下题:

1~1001放在1000大小的数组里,然后判断哪个数没有存进去。

思路:因为该题的数字较小,不考虑溢出,可分别求和将1+2+.....+1001=sum1, a[0]+a[1]+......+a[999]=sum2;然后相减求差,sum1-sum2的结果就是没有存进去的数.由于上题的数字可能很大需要考虑溢出问题,所以用异或法最优.

版权声明:本文为博主原创文章,转载请注明出处。

异或(^)的妙用——求一组数据中唯一一个出现奇数次的数!

在C语言中,“^”是一个双目运算符,用于完成两个数据的按位异或操作。 例如: 5^4 (00000101)^(00000100)=(00000001)=1 ...

POJ3071Football——概率动态规划+异或^的妙用

Football Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2884   Accep...
  • tcherry
  • tcherry
  • 2014年07月28日 20:48
  • 355

异或的妙用

http://blog.leezhong.com/tech/2011/06/03/php-xor-find-num.html 给你1-1000个连续自然数,然后从中随机去掉两个,再打乱顺序,...

【简单题】【异或的妙用】-DlutOj-1216

题目链接:http://acm.dlut.edu.cn/problem.php?id=1216 题目描述: 航神!你给我去重修语文! 这题...

labview结构事件妙用

  • 2012年03月09日 17:15
  • 326KB
  • 下载

小标签妙用

  • 2013年06月05日 14:53
  • 155KB
  • 下载

关于异或的一些东西和应用

异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结...

sql语句妙用指导 sql的使用

  • 2011年08月02日 11:32
  • 427KB
  • 下载

按位与(&)按位或(|)按位异或(^)按位取反(~)左移(<<)右移(>>)

基础知识:  1. and(&)运算 (按位与)   and运算通常用于二进制取位操作,例如一个数 and 1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,二进制的最末位为0表示该...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:异或的妙用
举报原因:
原因补充:

(最多只允许输入30个字)