Chinaunix首页 | 论坛 | 博客
  • 博客访问: 45659
  • 博文数量: 22
  • 博客积分: 536
  • 博客等级: 中士
  • 技术积分: 205
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-11 00:59
文章分类

全部博文(22)

文章存档

2013年(1)

2012年(5)

2011年(16)

我的朋友
最近访客

分类: C/C++

2012-02-22 11:53:37

    异或(XOR, Exclusive OR)也叫半加运算模2和,其运算法则相当于不带进位的二进制加法。
    用^表示异或运算符,则异或的运算法则为: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. (因为a^a=0)

所以swap两个int型变量a和b的值有更简单的办法:
    c = a^b; // c为临时变量
    b = c^b; // b得到a的值
    a = c^b; // 此时b就是最初的a
再将c换成a即可,省一个变量的存储空间。
    a ^= b;
    b ^= a;
    a ^= b;
这3行代码简洁,只有一个问题,如果a与b是同一个变量的引用,则a与b会变成0,所以还是引用中间变量c的办法可靠。
阅读(2031) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~