可能很多人都认为这道编程问题非常的简单,只需要设置一个中间变量,再通过赋值即可完成交换两值的内容。
那我们今天就进一步深究一下这道简单的问题:
最基础的代码如下:
#include<stdio.h> int main() { int a = 1, b = 2, t; printf("a=%d,b=%d\n", a, b); t = a; a = b; b = t; printf("a=%d,b=%d\n", a, b); system("pause"); return 0; }
但是如果题目要求不使用中间变量完成上述要求呢?
那么我们就需要好好考虑如何只使用给定的变量a、b进行交换操作。
我们可以令 a=a+b ,这时a已经是原来a的值加上b的值了。
再令 b=a-b ,则可完成b值的交换。
这时 a=a-b ,则完成了a值的交换。
代码如下:
#include <stdio.h> int main() { int a = 1,b = 2; printf("before:a=%d b=%d\n", a, b); a = a + b; b = a - b; a = a - b; printf("after:a=%d b=%d\n", a, b); system("pause"); return 0; }
但是经过反复考虑后,我们会发现这个算法其实存在一定的问题。
即当a、b数字很大时,则会发生溢出现象,超过int的整型范围。
这时我们就可以选择第三种算法进行编程,利用异或运算符进行编程。
代码如下:
#include <stdio.h> int main() { int a = 1; int b = 2; printf("before:a=%d b=%d\n", a, b); a = a^b; b = a^b; a = a^b; printf("after:a=%d b=%d\n", a, b); system("pause"); return 0; }
最后我们附上程序实验的结果:
原文:http://www.cnblogs.com/xiefei777/p/7604411.html