位运算的妙用技巧

版权声明:本文为博主原创文章,未经博主允许不得转载。 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】

扫描二维码关注公众号,回复: 5069496 查看本文章
//一般用于加解密
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;
}

猜你喜欢

转载自blog.csdn.net/HQ354974212/article/details/83686947