c++位运算

目录

常见的位运算

与&

或|

按位异或^

按位取反~

按位左移<<

按位右移>>

位运算技巧

1.判断数字奇偶性

2、获取二进制中的某一位

3、修改二进制中的某一位为1

4、快速判断一个数字是否为2的幂次方

5、获取二进制位中最低位的1

例题 二进制中1的个数


位运算简介

位运算是一种对二进制数的位进行操作的运算方式

它直接对二进制数的每一位进行逻辑操作,而不考虑整个数的数值大小,一般情况下,位运算中每一位都相互独立,各自运算得出结果(左右移位)除外

在计算机科学和编程中,位运算经常考察异或的性质、状态压缩、与位运算有关的特殊数据结构、构造题等。

注意:位运算只能应用于整数,且一般为非负整数,不能应用于字符、浮点等类型。

常见的位运算

与&

& 两个操作数都为1时结果为1,否则为0

或|

|两个位中,一个为1,结果就为1

按位异或^

^当两个位不同时,结果位为1,否则为0

按位取反~

0变1 1变0

按位左移<<

往高位移动,低位补0

例如,对于整数5(00000101),执行左移3位操作,相当于执行5*(2^3)

按位右移>>

相当于对原数除以2的幂次方操作

位运算技巧

1.判断数字奇偶性

x&1        如果结果是1说明是奇数,反之偶数

2、获取二进制中的某一位

x>>i&1        结果必然为1or0,表示x中的第i位

3、修改二进制中的某一位为1

x|(1<

4、快速判断一个数字是否为2的幂次方

x&(x-1)        如果是2的幂次方为0,因为:如果x是2的幂次方,x-1就有很多个连续的1且和x的1没有交集,两者运算一定为0,且其他情况必然不为0

5、获取二进制位中最低位的1

lowbit(x) = x&-x         如果x=(010010),则lowbit(x)=(000010)常用于结构树状数组中。

例题 二进制中1的个数

输入一个十进制正整数n,输出n的二进制中1的个数。

#include
using namespace std;
int main()
{
	unsigned int x; cin >> x;
	int ans = 0;
	while (x)
	{
		if (x & 1)ans++;
		x >>= 1;
	}
	cout << ans << endl;
	return 0;
}

你可能感兴趣的:(算法)