版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HQ354974212/article/details/83686947
C/C++语言提供的位运算符有:
运算符 | 含义 | 功能 |
& | 按位与 | 两个二进制位都为1,则该位的结果值为1;否则为0。 |
| | 按位或 | 两个二进制位中只要有一个为1,该位的结果值为1。 |
∧ | 按位异或 | 两个二进制位不同则结果为1(真),相同则结果为0(假) |
~ | 取反 | 一个二进制数按位取反,即将0变1,将1变0。 |
<< | 左移 | 左移运算符是用来将一个数的各二进制位全部左移N位,右补0。 |
>> | 右移 | 表示将a的各二进制位右移N位,移到右端的低位被舍弃,对无符号数,高位补0。 |
位运算的结果演示:
位运算 | 或 “|” or | 与 “&”and | 非 “~” not | 异或 “^” xor |
操作数1 | 01010101 | 11010101 | 10101010 | 10000001 |
操作数2 | 00101010 | 10101010 | (无) | 01111111 |
也能算结果 | 01111111 | 10000000 | 01010101 | 11111110 |
根据上述特性,可以产生以下技巧:
【判断一个数的奇偶性】
template<class Type>
inline bool Parity(Type value)
{
/*
0010 1111
0001 0001
*/
return (value & 1 != 0);
}
int main()
{
cout <<"是否是奇数"<< Parity<short>(2) << endl;
cout <<"是否是奇数" << Parity<unsigned short>(2) << endl;
cout <<"是否是奇数" << Parity<int>(3) << endl;
cout <<"是否是奇数" << Parity<unsigned int>(3) << endl;
}
【a 异或b, 然后再异或b ,会得到a】
//一般用于加解密
int main()
{
int key = 12345;
cout <<"100^key "<< (100^key )<< endl;
cout <<"100^key^key "<< (100^key^key) << endl;
//利用异或结果,可以推出key
cout << "100^12381 " << (100^12381) << endl;
}