深入理解计算机系统第二版习题解答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
posted @ 2014-11-16 15:36  枫竹梦  阅读(1553)  评论(0编辑  收藏  举报