Chinaunix首页 | 论坛 | 博客
  • 博客访问: 54068
  • 博文数量: 51
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2018-08-26 01:30
文章分类

全部博文(51)

文章存档

2020年(2)

2018年(49)

我的朋友

分类: C/C++

2018-08-29 20:25:42

04. 交换两个变量的值,不使用第三个变量


    我们知道,如果当进行按位操作的时候可以使用两个变量。

    而此题正可以应用异或操作来完成。

   数学公式:

   a⊕b = (?a ∧ b) ∨ (a ∧?b)

   伪代码:

   a xor b = (~a and b) or (a and ~b)

   C代码:



点击(此处)折叠或打开

  1. a ^ b = ((~a) & b) | (a & (~b))


点击(此处)折叠或打开

  1. b ^ a = ((~b) & a) | (b & (~a))

那么,b = ((~b) & ((~a) & b) | (a & (~b))) | (b & (~(((~a) & b) | (a & (~b)))));

               a = ((~a) & ((~b) & a) | (b & (~a))) | (a & (~((~b) & a) | (b & (~a))));


    实现代码:


点击(此处)折叠或打开

  1. /*
  2.  * exercise02.c
  3.  *
  4.  * Created on: 2012-11-5
  5.  * Author: xiaobin
  6.  *
  7.  * Huawei face questions
  8.  */
  9. #include <stdio.h>
  10. int main(int argc, char* argv[])
  11. {
  12.     int a, b;
  13.     a = 10;
  14.     b = 20;

  15.     // a = ((~a) & b) | (a & (~b));
  16.     // b = ((~b) & a) | (b & (~a));
  17.     a ^= b;
  18.     printf("a = %d b = %d\n", a, b);

  19.     b ^= a;
  20.     printf("a = %d b = %d\n", a, b);

  21.     a ^= b;
  22.     printf("a = %d b = %d\n", a, b);

  23.     return 0;
  24. }




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