|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<iostream>
- void swap(int*x,int*y);
- main()
- {
- int x,y;
- std::cout<<”请输入两个不同的数字:”;
- std::cin>>x>>y;
- swap(&x,&y);
- std::cout<<”调换后输出:”<<x<<’ ’<<y<<”\n”;
- }
- void swap(int*x,int*y)
- {
- *x^=*y;
- *y^=*x;
- *x^=*y
- }
复制代码
有没有大神能给讲讲,swap函数体里的,按位异或,实现两个数字的交换的,具体过程啊
第一次见函数体的按位异或的写法,不是很懂
位异或其实遵循我们数学运算里面的结合律和交换律
举例:
1 a=a^b
2 b=b^a
3 a=a^b
先看1
运行完,a的值=a^b
然后继续2步骤
当前的式子就变成 b=b^a^b,根据所谓的交换律,可以转成 b=(b^b)^a b^b为0,所以式子又变成 b=0^a,这个结果不就是b=a,已经实现一个交换了
接着3步骤
a=a^b,由上面的结果继续替换,a=(a^b)^a,然后你懂的,交换,a=(a^a)^b,a=0^b,所以a=b
|
|