黑马程序员技术交流社区
标题:
c语言的变量对换问题
[打印本页]
作者:
Ye•Ye
时间:
2014-5-6 11:56
标题:
c语言的变量对换问题
本帖最后由 Ye•Ye 于 2014-5-7 15:34 编辑
请问^是相同为0不相同为1吧?那么不经过第三个变量调换两个变量的值:
a^=b;
b^=a;
a^=b;
这样对调的结果不对啊,比如:
int i = 6;
a^=b;
b^=a;
a^=b;
printf("%d %d\n",i);
结果是0,0。请问这是怎么回事?
作者:
蜗牛强
时间:
2014-5-6 13:07
本帖最后由 蜗牛强 于 2014-5-6 14:19 编辑
楼主的代码有很多问题啊,变量都对应不上,程序应该这样写就可以对调了。
#include <stdio.h>
int main()
{
int a=6,b=7;
a^=b;
b^=a;
a^=b;
printf("%d %d",a,b);
return 0;
}
复制代码
异或运算过程:程序走向→
a^=b b^=a a^=b
a=6:1010 0001 0001 1011 7
b=7:1011 1011 1010 1010 6
a^b:0001 1010 1011
作者:
godlike
时间:
2014-5-6 13:14
这个我做过专门的总结:
方法一:利用数学运算的技巧
2 int main()
3 {
4
5 int a =10, b = 20;
6
7 printf("交换前a=%d, b=%d\n", a, b);
8
9 a = a - b;
10 b = a + b;
11 a = b - a;
12
13 printf("交换后a=%d, b=%d\n", a, b);
14
15 return 0;
16 }
复制代码
这种方法的写法不唯一,对于a,b;只要先给其中一个先赋予a-b,其他的自己算一下就能写出来;
方法二:异或运算的特点:a^b^a = a^a^b = 0^b = b,交换律,相同数值异或为0,0和任何数异或为任何数
2 int main()
3 {
4 int a =10, b = 20;
5 printf("交换前a=%d, b=%d\n", a, b);
6
7 a = a^b;
8 b = b^a;
9 a = a^b;
10
11 printf("交换后a=%d, b=%d\n", a, b);
12
13 return 0;
14 }
复制代码
第三方变量的方法,就很简单了,也是最长用得;掌握了第三方变量的方法,基本就行了;
楼主可以看看我的博客里写的:http://www.cnblogs.com/cxbblog/p/3704899.html
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2