Chinaunix首页 | 论坛 | 博客
  • 博客访问: 251577
  • 博文数量: 88
  • 博客积分: 1429
  • 博客等级:
  • 技术积分: 523
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-18 15:31
文章分类

全部博文(88)

文章存档

2017年(2)

2016年(24)

2013年(1)

2012年(24)

2011年(15)

2010年(22)

我的朋友

分类: C/C++

2010-10-23 10:53:05

/*
 * 不用临时变量,交换两个变量的值。
 * ---------------
 * 使用异或位运算符:^
 * ---------------
 */

#include <stdio.h>

void main()
{
//    char a = 4;
//    char b = 35;
    int a = 4;
    int b = 35;
    printf("Before change:\n");
    printf("a = %d,\tb = %d\n", a, b);

    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    printf("After change:\n");
    printf("a = %d,\tb = %d\n", a, b);
}

关于'^'
(1)使特定的位翻转:即将特定的位与'1'相异或。
      0110 0011
  (^) 0000 1111
-----------------
      0110 1100
前四位不变,后四位翻转。

(2)保留原值,与0相异或
      0000 0110
  (^) 0000 0000
------------------
      0000 0110

(3)变量自身相异或,为0。

阅读(869) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~