黑马程序员技术交流社区

标题: 两个变量值的交换问题 [打印本页]

作者: Meniny    时间: 2014-8-16 09:30
标题: 两个变量值的交换问题
稍微说一下吧。
如果不借助临时变量,那么学过汇编的同学一定都能想到这样的方法:
  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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2