在做笔试题的时候遇到议一个比较有意思的题--如标题
实现方法有三种:
1.加减法
code:
#include<stdio.h>
int main()
{
int a=520,b=1314;
printf("after:\n");
printf("a=%d,b=%d\n",a,b);
a=a+b;
b=a-b;
a=a-b;
printf("after:\n");
printf("a=%d,b=%d\n",a,b);
return 0;
}
2.乘除法
code:
#include<stdio.h>
int main()
{
int a=520,b=1314;
printf("before:\n");
printf("a=%d,b=%d\n",a,b);
a=a*b;
b=a/b;
a=a/b;
printf("after:\n");
printf("a=%d,b=%d\n",a,b);
return 0;
}
如果对浮点数进行操作,有可能会丢失一定的精度。
加减法与乘除法都不会造成溢出!溢出的会在后面溢出回来。以加减法为例,第一步的加
运算可能会造成溢出,但它所造成的溢出会在后边的减运算中被溢出回来。
3.异或法
code:
#include<stdio.h>
int main()
{
int a=520,b=1314;
printf("before:\n");
printf("a=%d,b=%d\n",a,b);
a=a^b;
b=a^b;
a=a^b;
printf("after:\n");
printf("a=%d,b=%d\n",a,b);
return 0;
}
此外的方法待学习,如有错误还望指出。