两整形变量内容相互交换问题!!!

版权声明:[email protected] https://blog.csdn.net/qq_271334644/article/details/82828536

运行环境:win10 vs2013

题目:给定两个整形变量的值,将两个值的内容进行交换 !!!

    一般我们拿到这个题会在两个整数之间数值进行交换引入一个新的临时整形变量,比如临时变量C

                                                                      

       如图我们可以将A的值赋值给新的空置变量C,然后将B的值赋予空置的A,接着将C中存储有A的值再赋值给空置的B,这样我们就完成了变量A,B之间内容的交换.下面我们就可以开始写代码,进行测试.

程序实现如下:

我们看下运行结果:

      我们完成了两个整形变量值内容的交换,那么我们可以思考我们完成的是否完美,是否还会有其他问题的出现?

     各位是否考虑过如果这个整形变量的值过大的问题呢,我们可以尝试下交换内容过大会出现什么问题

我们现在将a,b的值变大其他代码不变然后再进行编译

如图我们可以发现这与我们的预期结果完全不一致,这是什么导致的呢!!!

      因为 在32为编译环境中,int的取值范围是2^{32 },最大整数为2^{32-1 },有符号数则要去除一个符号位,而此时A,B已经超过取值范围,所以会出现编译结果错误的情况.

      引入临时变量的算法其实还有多种,在这里只进行一种方法的实验,有兴趣的朋友可以进行其他算法的尝试!

后续问题:如果两个整形变量中的内容进行交换,不能引进第三个变量该如何解决呢!!!

这就需要用到C语言中按位异或运算来解决问题,什么是异或运算?

简单来说

异或运算采用二进制运算规则,两数相同异或运算后结果变为0,两数不同进行异或运算后结果变为1

这样我们就能在不引入临时变量的情况下将两个整形变量的内容进行交换

程序实现如下:

                         

                                                                                                                                             若有不足之处希望大家指出,谢谢!!....

猜你喜欢

转载自blog.csdn.net/qq_271334644/article/details/82828536