不使用判断语句交换两变量的值?

来源:互联网  时间:2016/9/6 14:20:29

关于网友提出的“ 不使用判断语句交换两变量的值?”问题疑问,本网通过在网上对“ 不使用判断语句交换两变量的值?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 不使用判断语句交换两变量的值?
描述:

有两种方案:
(1)
a = a + b;
b = a - a;
a = a - b;
(2)
a = a ^ b;
b = a ^ b;
a = a ^ b;
答案虽然知道了,但是没有答案的话,这种问题应该如何去思考呢? 什么运算符可成全上述的操作呢?哪位大侠指点下?


解决方案1:

#include 
#define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0)
char   *p1="1" ,*p2="2" ;
char    c1=1   , c2=2   ;
short   s1=1   , s2=2   ;
int     i1=1   , i2=2   ;
__int64 I1=1i64, I2=2i64;
float   f1=1.0f, f2=2.0f;
double  d1=1.0 , d2=2.0 ;
void main() {
    SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);
    SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);
    SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);
    SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);
    SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);
    SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);
    SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);
    SWAP(c1,c1);
    printf("%d\n",c1);
}
//char *         2,       1
//char           2,       1
//short          2,       1
//int            2,       1
//__int64     2,    1
//float          2,       1
//double        2,      1
//2

上一篇openoffice的学习
下一篇http get请求 SendRequest抛出异常
明星图片
相关文章
《 不使用判断语句交换两变量的值?》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)