XOR 交换输出预测
#include <stdio.h>
void fun(char a[]){
a[0]^=a[1]^=a[0]^=a[1];
}
int main(int argc, char **argv){
char b[10];
b[0]='h';
b[1]='j';
fun(b);
printf("%c",b[0]);
return 0;
}
这段代码有什么问题。它应该交换 b[0]
和 b[1]
但它没有交换。
#include <stdio.h>
void fun(char a[]){
a[0]^=a[1]^=a[0]^=a[1];
}
int main(int argc, char **argv){
char b[10];
b[0]='h';
b[1]='j';
fun(b);
printf("%c",b[0]);
return 0;
}
What is wrong with this code. It shall swap the b[0]
and b[1]
but it is not swapping.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
a[0]^=a[1]^=a[0]^=a[1]; 的未定义行为。评估和分配的顺序未定义。
Undefined behavior for
a[0]^=a[1]^=a[0]^=a[1];
. Order of evaluation and assignment is not defined.“新 C 标准。经济和文化评论”一书给出了两种变体xor-swap 第 1104 页:
因此,第二个变体不可移植并且是不正确的。
The "The New C Standard. An Economic and Cultural Commentary" book gives two variants of xor-swap at page 1104:
So, the second variant is not portable and is incorrect.