交换两个值,不用临时变量

/*
 * 不用临时变量,交换两个变量的值。
 * ---------------
 * 使用异或位运算符:^
 * ---------------
 */
#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。

作者: juruqiang   发布时间: 2010-10-23