请教关于宏 #swap(x,y) (x)^=(y)^=(x)^=y

xuweixxxx 2001-02-27 06:31:00
各位大虾小弟请教c中下面低宏定义是如何实现两数交换的及"^"的应用!
#swap(x,y) (x)^=(y)^=(x)^=y

另请教c++的
a=1<<32;
cout<<"1<<32=:"<<a<<endl;
b=1;
a=b<<32 ;
cout<<"b<<32=:"<<a<<endl;
为什么运行结果不一样?
谢谢了!
...全文
155 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
myan 2001-02-27
  • 打赏
  • 举报
回复
^是异或运算符。异或运算有一个特点:它是自己的逆运算。换言之,c = a ^ b,
则a = c ^ b. 凡是互为逆运算的的一对算子均可以执行以下的运算序列以交换两个
变量的值:(以+/-为例)
a = a + b;
b = a - b;
a = a - b;

既然异或运算对自身形成逆运算,则
a = a ^ b; b = a ^ b; a = a ^ b;
同样也能交换两者的值。上述宏不过是用比较晦涩的形式写出以上代码而已。

第二个问题与实现相关,没有讨论价值。
sundayboys 2001-02-27
  • 打赏
  • 举报
回复
1是常量,b是变量,<<意义就不一样了。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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