频道栏目
首页 > 程序开发 > 软件开发 > C++ > 正文
华为面试题解析 - 04
2013-11-19 09:16:52           
收藏   我要投稿
04. 交换两个变量的值,不使用第三个变量

 

 

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

 

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

 

   数学公式:

 

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

 

   伪代码:

 

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

 

   C代码:

 

[cpp]  

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

[cpp] view plaincopy

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))));

 

 

    实现代码:

 

[cpp]  

/* 

 * exercise02.c 

 * 

 *  Created on: 2012-11-5 

 *      Author: xiaobin 

 * 

 *      Huawei face questions 

 */  

#include <stdio.h>  

int main(int argc, char* argv[])  

{  

    int a, b;  

    a = 10;  

    b = 20;  

  

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

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

    a ^= b;  

    printf("a = %d b = %d\n", a, b);  

  

    b ^= a;  

    printf("a = %d b = %d\n", a, b);  

  

    a ^= b;  

    printf("a = %d b = %d\n", a, b);  

  

    return 0;  

}  

 

 

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 华为
上一篇:华为面试题解析 - 03
下一篇:华为面试题解析 - 05
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站