深入理解计算机系统第二版习题解答CSAPP 2.10

时间:2023-03-10 07:05:53
深入理解计算机系统第二版习题解答CSAPP 2.10

对于任一位向量a,有a ^ a = 0。考虑下面的程序:

 void inplace_swap(int *x, int *y)
{
*y = *x ^ *y;
*x = *x ^ *y;
*y = *x ^ *y;
}

假设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