编程小技巧

    返回首页    发表留言
本文作者:李德强
          技巧十二:互换两个变量的值
 
 

        今天跟大家分享的小技巧是关于变量互换的,在《无重复随机数》中我们学习如何生成N个不重复的随机数,其中就用到了两个变量的值互换,如果我们需要交换两个int型变量a和b需要在程序里是这样写:

int t = a;
a = b;
b = t;

        这是一个标准做法,很多朋友也喜欢这种写法,它引入了一个临时变量,用于存放a的值,然后把b的值赋值给a,再把t的值赋值给b。于是就完成了两个变量的值交换功能。

        下面我们提出一个问题:在不引入临时变量的情况下如何实现a、b两个变量的互换功能?

        我们来看看下面的程序:

a += b;
b = a - b;
a -= b;

        先将a赋值成a与b的和,然后在这个基础上减去b的值,就得到了原来a的值,把这个值赋值给b,于是b就成为了a原来的值,再用a与b的和减去b(a原来的值)就得到了b原来的值,把它赋值给a。这样就完成了a与b的值互换问题。

        有细心的朋友会问:在a = a + b;时如果a、b的和超过了a的存储空间会怎么样?大家可以亲自动手试一试,结果还是没有问题的,请参见《补码原理》并思考为原因。

        使变量a、b互换,还有其它的办法,比如使用“异或”运算,其原理与上面用加减法一样,只不过运算法则变为了“异或”,我们再来看看程序实现:

a ^= b;
b ^= a;
a ^= b;

        这样做的结果与上面两种办法得到的结果是一样的。希望大家在遇到问题时多思考、多动脑,培养自己灵活的思维方式。

 

        今天的小技巧你学会了吗?

 

 

    返回首页    返回顶部
#1楼  点苍双剑  于 2017年08月01日09:23:42 发表
 
异或 这种方式用到两个基本公式:

a^a = 0

a^0 = a
#2楼  匿名  于 2017年08月03日08:59:39 发表
 
支持问渠网
#3楼  李德强  于 2017年08月10日17:10:32 发表
 
“异或”可以这样理解:异既是不同,或就是一

“异或”的运算规则是:不同的数运算结果为1
  看不清?点击刷新

 

  Copyright © 2015-2018 问渠网 辽ICP备15013245号