第一种方法:
a=a+b;
b=a-b;
a=a-b;
代码如下:
[cpp]
view plain
copy
- #include "stdio.h"
- int main(void)
- {
- int a,b;
- printf("请输入两个变量a和b:/n");
- scanf("%d %d",&a,&b);
- printf("a和b交换前:/n");
- printf("a=%d b=%d/n",a,b);
- a=a+b;
- b=a-b;
- a=a-b;
- printf("a和b交换后:/n");
- printf("a=%d b=%d/n",a,b);
- system("pause");
- return 0;
- }
缺点:可能越界
第二种方法:
解决方法:(a、b异或的结果 ,和a异或得b ,和b异或得a)
a=a^b;
b=a^b;
a=a^b;
代码如下:
[cpp] view plaincopy
- #include "stdio.h"
- int main(void)
- {
- int a,b;
- printf("请输入两个变量a和b:/n");
- scanf("%d %d",&a,&b);
- printf("a和b交换前:/n");
- printf("a=%d b=%d/n",a,b);
- a=a^b;
- b=a^b;
- a=a^b;
- printf("a和b交换后:/n");
- printf("a=%d b=%d/n",a,b);
- system("pause");
- return 0;
- }
写成宏替换的方法如下:
[cpp]
view plain
copy
- #include "stdio.h"
- #define swap(a,b) (a)^=(b)^=(a)^=(b)
- int main(void)
- {
- int a,b;
- printf("请输入两个变量a和b:/n");
- scanf("%d %d",&a,&b);
- printf("a和b交换前:/n");
- printf("a=%d b=%d/n",a,b);
- swap(a,b);
- printf("a和b交换后:/n");
- printf("a=%d b=%d/n",a,b);
- system("pause");
- return 0;
- }
本文介绍了两种变量交换方法:一种是传统的加减法,可能会导致整数溢出;另一种是利用异或运算进行交换,避免了整数溢出的风险,并通过宏替换进一步简化代码。该文还提供了代码示例,帮助开发者理解并应用这些技巧。
606

被折叠的 条评论
为什么被折叠?



