今天跟大家分享的小技巧是关于变量互换的,在《无重复随机数》中我们学习如何生成N个不重复的随机数,其中就用到了两个变量的值互换,如果我们需要交换两个int型变量a和b需要在程序里是这样写:
01:int t = a;
02:a = b;
03:b = t;
这是一个标准做法,很多朋友也喜欢这种写法,它引入了一个临时变量,用于存放a的值,然后把b的值赋值给a,再把t的值赋值给b。于是就完成了两个变量的值交换功能。
下面我们提出一个问题:在不引入临时变量的情况下如何实现a、b两个变量的互换功能?
我们来看看下面的程序:
01:a += b;
02:b = a - b;
03: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互换,还有其它的办法,比如使用“异或”运算,其原理与上面用加减法一样,只不过运算法则变为了“异或”,我们再来看看程序实现:
01:a ^= b;
02:b ^= a;
03:a ^= b;
这样做的结果与上面两种办法得到的结果是一样的。希望大家在遇到问题时多思考、多动脑,培养自己灵活的思维方式。
今天的小技巧你学会了吗?
领取专属 10元无门槛券
私享最新 技术干货