开发者社区 问答 正文

用异或交换两个变量值的疑惑

#include<stdio.h>
int main(){
    int a[2]={8,7};int min,i;
    i=0,min=1;
    a[min]^=a[i]^=a[min]^=a[i];//交换变量
//a[i]=a[i]^a[min],a[min]=a[i]^a[min],a[i]=a[i]^a[min];
    printf("%d %d ",a[i],a[min]);

}   
这个代码输出是7,0
交换变量一行换成下一行的注释句运行结果是7,8;
但是这两个不是等价的么,书上说是等价的;

#include<stdio.h>
int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    a^=b^=a^=b;
    printf("%d %d",a,b);
}

而这里面的交换变量是成功的;
为什么呢?

展开
收起
a123456678 2016-06-07 19:07:03 1575 分享 版权
1 条回答
写回答
取消 提交回答
  • a[min]^=a[i]^=a[min]^=a[i]
    这句跟一句话里面使用多个自增一样,是未定义行为。简而言之就是,你在一句代码里面多次访问了a[min],并做出了修改。第二次的访问使用了修改前的值还是修改后的值,不同编译器的实现不一样。

    2019-07-17 19:30:48
    赞同 展开评论
问答分类:
问答地址: