一、小技巧
1.与特殊数与&(1,0xAAAA,0x5555等)
应用:1.判断奇偶 2.见后面有趣应用
2.异或的技巧
本身异或为0,与0异或为本身,满足交换律。
应用:不借助第三个数交换两数,有趣应用4
void Swap(int &a, int &b)
{
if (a != b)
{
a ^= b;
b ^= a;
a ^= b;
}
}
可以这样理解:
第一步 a^=b 即a=(a^b);
第二步 b^=a 即b=b^(a^b),由于^运算满足交换律,b^(a^b)=b^b^a。由于一个数和自己异或的结果为0并且任何数与0异或都会不变的,所以此时b被赋上了a的值。
第三步 a^=b 就是a=a^b,由于前面二步可知a=(a^b),b=a,所以a=a^b即a=(a^b)^a。故a会被赋上b的值。
3.取反加1
应用:求相反数
4.巧妙的分组处理
应用:有趣应用2,3
二、有趣的应用
1. 高低位交换
给出一个16位的无符号整数。称这个二进制数的前8位为“高位”,后8位为“低位”。现在写一程序将它的高低位交换。例如,数34520用二进制表示为:
10000110 11011000
将它的高低位进行交换,我们得到了一个新的二进制数: