对于任一位向量a,有a ^ a = 0。考虑下面的程序:
1 void inplace_swap(int *x, int *y) 2 { 3 *y = *x ^ *y; 4 *x = *x ^ *y; 5 *y = *x ^ *y; 6 }
假设x和y指向的位置分别是a和b。完成下表:
步骤 | *x | *y |
初始 | a | b |
第一步 | a | a^b |
第二步 | a^(a^b) | a^b |
第三步 | a^(a^b) | a^(a^b)^(a^b) |
由于异或运算满足交换率和结合率,且a ^ 0 = 0, a ^ = ~a。所以有
步骤 | *x | *y |
初始 | a | b |
第一步 | a | a^b |
第二步 | b | a^b |
第三步 | b | a |
时间: 2024-10-12 09:22:26