C程序设计语言(第2版·新版)
练习2-7:编写一个函数invert(x, p, n),该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位求反(即,1变成0,0变成1),x的其余各位保持不变。
解答1:
(x | (~(~0<<n)<<(p+1-n))) & ~(x & (~(~0<<n)<<(p+1-n)));
解答2:
x^(~(~0<<n)<<(p+1-n));
解答1是自己写的,解答2是对应的习题解答书中的答案,相比之下解答2确实更加简洁,采用与1异或可以直接取反,非常妙!