Redian新闻
>
做题了,做题了,看谁能搞清楚
avatar
做题了,做题了,看谁能搞清楚# JobHunting - 待字闺中
d*n
1
swap a and b using XOR (no the third variable). The following function is
correct? Explain
swap(int *a, int *b)
{
*a ^= *b ^= *a ^= *b;
}
I found that if I write it as follows, it's correct
*a ^= *b;
*b ^= *a;
*a ^= *b;
but *a ^= *b ^= *a ^= *b is wrong but why? explain in detail
avatar
s*t
2
我试了试,第一种是对的啊

【在 d*******n 的大作中提到】
: swap a and b using XOR (no the third variable). The following function is
: correct? Explain
: swap(int *a, int *b)
: {
: *a ^= *b ^= *a ^= *b;
: }
: I found that if I write it as follows, it's correct
: *a ^= *b;
: *b ^= *a;
: *a ^= *b;

avatar
d*n
3
第一种是 a = 0 and b = 3;

【在 s*********t 的大作中提到】
: 我试了试,第一种是对的啊
avatar
w*e
4
看起来像是 *a^=*b^=*a^=*b在具体运算时第一个*a的值跟第二个*a的值没有同时
update。第一个*a应该是保留了初始值,第二个*a=*a^*b,之后*b换成*a的初始值,这
样最后一次*a^*b实际是两个相同的数xor,结果为0.

【在 d*******n 的大作中提到】
: 第一种是 a = 0 and b = 3;
avatar
i*r
5
The statement is equivalent to *a = *a ^ (*b ^= *a ^= *b);
If compiler evaluates from left to right, then the second *a is the initial
value passed in, which is wrong.
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。