华为的一道面试题目(C/C++初学者进):

不使用第三个变量,交换两个整型的变量内容.
其实只是为了启发一种不要被教科书上"定义中间变量来交换两个变量"的僵化思维.

二楼的做法虽然高明,但当数据过大时可能会溢出.
Auto_eth0的第一种做法,即按位取异或的方法,才是最好的。
第一次取异或,ab相同的位变为0,不同的变为1,并存入a中。b再与其取异或时,如果此时a的某一位为1,则表示原来的a,这一位和b不同,和现在的a取异或后b在该位的值正好变的与原来相反;如果a的某位为0,则表示原来的a,这一位和b相同,和现在的a取异或后b在该位的值正好不变。
这样做不仅能交换整形变量,其他任何形式的变量都能交换,厉害!!!
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-04-18
x ^= y ; y ^= x ; x ^= y 只有这种比较好
他出这种题就是考我们对问题的了解
如果用 x= x+y ; y = x-y ; x = x-y ;
会出现溢出问题 当x,y都比较大或小时 2个+或者-就会溢出 所以这种题就是看你的对题意的了解以及考虑问题的全面性,只有x ^= y ; y ^= x ; x ^= y才是可行的
第2个回答  2009-04-18
1.x ^= y ; y ^= x ; x ^= y ;
2.x = x+y ; y = x-y ; x = x-y ;
3.x = x-y ; y = y+x ; x = y-x ;
4.x = y-x ; x = y-x ; x = x+y ;本回答被提问者采纳
第3个回答  2009-04-18
华为真的无耻(或者变态)到这个地步吗,真不可思议,会这个就代表很高的技术吗,真是可笑。

int a,b;
a=a+b;
b=a-b;
a=a-b;
第4个回答  2009-04-18
x ^= y ; y ^= x ; x ^= y ;
很好!
相似回答
大家正在搜