读书人

急求答案,该怎么处理

发布时间: 2012-07-29 15:26:14 作者: rapoo

急求答案
求如何用位运算,且不用第三个变量,交换两个变量的值

[解决办法]
比如:int a=10,b=5;
a = a^b;
b = a^b;
a = a^b;
利用了逻辑里面的与:
第一步:a1 = a^b;(a1表示新的a)
第二步:b = a1^b = (a^b)^b = a;
第三步:a = a1^b = (a^b)^a = b;
[解决办法]
是异或操作,写错了
[解决办法]
通过异或运算能实现变量的交换,请看以下代码:
int a=10,b=12; //a=1010^b=1100;
a=a^b; //a=0110^b=1100;
b=a^b; //a=0110^b=1010;
a=a^b; //a=1100=12;b=1010;
此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。
即:a^b^b=a。将a=a^b代入b=a^b则得b=a^b^b=a;同理可以得到a=b^a^a=b;轻松完成交换。

读书人网 >C语言

热点推荐