深入理解计算机系统第二版习题解答CSAPP 2.10
对于任一位向量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 |
作者:马 岩(Furzoom) (http://www.cnblogs.com/furzoom/)
版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。
版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。