华为面试题解析 - 04

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


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

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

   数学公式:

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

   伪代码:

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

   C代码:

a ^ b = ((~a) & b) | (a & (~b));
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))));


    实现代码:

/*
 * 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;
}




你可能感兴趣的:(华为面试题解析 - 04)