程序实现两个整型数值的交换
Posted sunjiyuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序实现两个整型数值的交换相关的知识,希望对你有一定的参考价值。
题目:请写出一个小程序,实现对两个整型数值一个和b的交换
思路1:交换两个数值,最一般的做法,是创建一个临时变量临时,这个变量我们需要的不是它具体的值起到什么作用,而是要借用它所开辟出来的空间,进行被交换变量的暂时存放将一个的值存入临时,再将b存入一个中,然后再将温度里存的一个的值放入b中,即可实现一个与b的交换,如图:
则其结果:
那么像这样的题目,有没有值得优化的地方呢。当然是有的,比如,假设现在禁止使用这个中间变量温度,难道就不能再进行交换了吗。当然是可以的,这里给出优化的思路2,比如可以使用数值计算的方法,如图分析
代码实现:
这里并不用担心数字大小的问题,因为做减法运算的变量a实际上是对a,b求和之后的结果覆盖了。变量值已经发生变化了。故而结果仍旧在预期:
但是这个做法有没有问题呢?当然是有的,因为我们知道整型值的存储是有取值范围的,当我们的变量进行相加时,需要注意的是,如果数值很小,是没有问题的。比如现在要交换的两个值进行相加,结果他们的和超过了范围,那么会发生溢出,这时在使用加法运算就有问题了,并且如果是想要引申到浮点型数据的交换,就会发生精度损失,那么就可以看出,思路2也是有缺陷的
优化思路3:运用位运算操作符异或^
异或的功能是两个二进制值相同结果为0,相异结果为1,这里将a和b先分别转化为二进制数,让a与b异或,再让得出的结果分比对a和b进行异或操作。可以看出异或的结果就如同一串密码,一次异或相当于加密,两次异或相当于解密
采用异或就可以避免数据过大造成的溢出了,原因是,异或其实也被称为不进位加法,它既然结果不会发生进位,那么只要参与交换的变量取值没有溢出,进行异或操作就永远不会发生溢出。
当然异或操作进行交换,也不是没有局限性的。
作为二进制进行为操作运算,故而这个方法就只适用于整型值之间的交换了。
以上是关于程序实现两个整型数值的交换的主要内容,如果未能解决你的问题,请参考以下文章