A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Meniny 中级黑马   /  2014-8-16 09:30  /  686 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

稍微说一下吧。
如果不借助临时变量,那么学过汇编的同学一定都能想到这样的方法:
  1. a ^= b;
  2. b ^= a;
  3. a ^= b;
复制代码

但是,现在高级语言中的临时变量基本是自由使用的,通常我们会借助临时变量:
  1. tmp = a;
  2. a = b;
  3. b = tmp;
复制代码

后者明显更具有可读性,也更有利于编译器辨别而使用更高效的代码,例如EXCH。
而且,后者明显还可以用于指针、浮点数这些变量,而不是像XOR那样只用于整数。
除此之外,针对前者,可能有的同学偷懒,直接写成:
  1. a ^= b ^= a ^= b
复制代码

但这样一来就更糟糕了,因为你试图在序列点之间两次修改a,而这种做法是未定义的,所以在不同的编译器下可能会出现不同结果,比如icc

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马