交换两个整数的值

piaomiao163 2009-02-24 11:14:59
常见的做法应该是:

if(a>b){
   c=a;
   a=b;
   b=c;
  }



发现还有一种xor的做法


如果&x != &y
  
  x = x xor y
  y = x xor y
  x = x xor y



我的疑问是: &x != &y 是判断这两个数是不是同一个数,而不是判断他们的值是否相等吧??
另外两个整数之间xor代表什么啊???我不懂
希望解答一下~~
...全文
300 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
daiafei 2009-07-02
  • 打赏
  • 举报
回复
学习学习~~~
sunnyplain 2009-02-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chevin 的回复:]
嘿嘿,让我想起了另一种方法

fn(int a,int b)
{
a=a+b;
b=a-b;
a=a-b;
}
[/Quote]

但是这个方法要考虑整型的表示范围,但是lz的方法却不用
zqz981 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zqz981 的回复:]
奇怪的是xor 怎么能用于整形判断啊
二进制还好说 当逻辑判断
x = x xor y
y = x xor y ==> y =( x xor y )xor y ==> y = x  (y xor y  == true)
x = x xor y ==> x = ( x xor y) xor x ==> x = y ( x xor x == true)


[/Quote]
俺错啦
zqz981 2009-02-24
  • 打赏
  • 举报
回复
奇怪的是xor 怎么能用于整形判断啊
二进制还好说 当逻辑判断
x = x xor y
y = x xor y ==> y =( x xor y )xor y ==> y = x (y xor y == true)
x = x xor y ==> x = ( x xor y) xor x ==> x = y ( x xor x == true)

waizqfor 2009-02-24
  • 打赏
  • 举报
回复
&x != &y 是判断这两个数是不是同一个数,而不是判断他们的值是否相等吧
=====================>
是判断同一个数 LZ分析的很正确
waizqfor 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 piaomiao163 的帖子:]
常见的做法应该是:

C/C++ code
if(a>b){
   c=a;
   a=b;
   b=c;
  }





发现还有一种xor的做法


C/C++ code
如果&x != &y
  
  x = x xor y
  y = x xor y
  x = x xor y





我的疑问是: &x != &y 是判断这两个数是不是同一个数,而不是判断他们的值是否相等吧??
另外两个整数之间xor代表什么啊???我不懂
希望解答一下~~
[/Quote]
异或,位操作符:
0 xor 0=0
1 xor 0=1
0 xor 1=1
1 xor 1=0
Chevin 2009-02-24
  • 打赏
  • 举报
回复
嘿嘿,让我想起了另一种方法

fn(int a,int b)
{
a=a+b;
b=a-b;
a=a-b;
}
tangshuiling 2009-02-24
  • 打赏
  • 举报
回复

x = x xor y
y = x xor y //这句就相当与y=x xor y xor y (而y xor y=0 ,x xor 0=x ) 由此y=x
x = x xor y //同理

还有其他的楼主可参考:
x=x+y;
y=x-y;
x=x-y;
也可实现交换
sunnyplain 2009-02-24
  • 打赏
  • 举报
回复
很不错的想法,长见识

xor应该是按位异或,就是c/c++中的运算符^,楼主自己尝试几次就知道为什么了
ltc_mouse 2009-02-24
  • 打赏
  • 举报
回复
我的疑问是: &x != &y 是判断这两个数是不是同一个数,而不是判断他们的值是否相等吧??
另外两个整数之间xor代表什么啊???我不懂
-----------------------------------------
是的,判断x与y是否同一个数.这与xor有关.
xor是"按位异或"运算,C/C++中用^表示. lz可搜索"位运算"了解更多~
zqz981 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 piaomiao163 的帖子:]
常见的做法应该是:
C/C++ codeif(a>b){
   c=a;
   a=b;
   b=c;
  }

发现还有一种xor的做法

C/C++ code如果&x!=&y
  
  x=x xor y
  y=x xor y
  x=x xor y

我的疑问是: &x != &y 是判断这两个数是不是同一个数,而不是判断他们的值是否相等吧??
另外两个整数之间xor代表什么啊???我不懂
希望解答一下~~
[/Quote]

第二种判断 应该是判断地址吧
xor 不是用在逻辑判断上面的吗 很奇怪 第一次见到
等待高手分析

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧