深入理解计算机系统第二版习题解答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 |
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。