【C++】位运算

位运算的使用方法

算法篇 位运算

1.位与运算(&)

判断是否为偶数

#include<iostream>
using namespace std;
int  main() {
    
    
	int n;
	cin >> n;
	if (n & 1)
		cout << n << "是奇数";
	else
		cout << n << "是偶数";
	return 0;
}

判断一个数n ,是不是2的整数幂:

#include<iostream>
using namespace std;
int  main() {
    
    
	int n;
	cin >> n;
	if (n & (n - 1)) {
    
    
		cout << n << "不是2的整数幂";
	}
	else {
    
    
		cout << n << "是2的整数幂";
	}
	return 0;
}

在这里插入图片描述

计算一个数的二进制中1的个数:

#include<iostream>
using namespace std;

void BinaryRecursion(int n)//二进制输出
{
    
    
	int a;
	a = n % 2;
	n = n>>1;
	if (n == 0)
		;
	else
		BinaryRecursion(n);
	cout<<a;
}
int  main() {
    
    
	int n,flag = 1,count = 0;
	cin >> n;
	while (flag <= n) {
    
    
		if (flag & n)
			count++;
		flag <<= 1;
	}
	cout << n << " 二进制形式为:" ;
	BinaryRecursion(n);
	cout << "\n";
	cout << count;
	return 0;
}

在这里插入图片描述
在这里插入图片描述

#include<iostream>
using namespace std;
int hammingWeight(int n) {
    
    
	int count = 0;
	while (n) {
    
    
		if (n & 1)
			count++;
		n >>= 1;
	}
	return count;
}
int  main() {
    
    
	cout << hammingWeight(38);	
	return 0;
}

第二种:

#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>
int hammingWeight(int n) {
    
    
	int count = 0;
	while (n) {
    
    
		count++;
		n = n & (n - 1);//每次执行都会将最右边的1变为0
	}
	return count;
}
int  main() {
    
    
	cout << hammingWeight(5126);
	return 0;
}

在这里插入代码片

2.位或运算(|)

3.位异或运算(^)

异或的几条性质:

1、交换律:a ^ b=b ^ a
2、结合律:(a ^ b) ^ c == a^ (b ^ c)
3、自反性:对于任何数x都有x^ x=0,x^ 0=x 例如:A^B ^ B = A

4.取反运算(~)

5.左移

乘以2

扫描二维码关注公众号,回复: 13058415 查看本文章
#include<iostream>
using namespace std;
int  main() {
     
     
	int n;
	cin >> n;
	cout << (n << 1);
	return 0;
}

6.右移

整除2

#include<iostream>
using namespace std;
int  main() {
     
     
	int n;
	cin >> n;
	cout << (n >> 1);
	return 0;
}

#include<iostream>
using namespace std;
void BinaryRecursion(int n)//二进制输出
{
     
     
    int a;
    a = n % 2;
    n = n >> 1;
    if (n == 0)
        ;
    else
        BinaryRecursion(n);
    cout << a;
}
int main() {
     
     
    int n;
    cin >> n;
    cout << n << "二级制形式为:";
    BinaryRecursion(n);
    cout << "\n";
    int k;
    cin >> k;
    n = (n ^ (1<<(k-1)));
    cout << "n = " << n<<",二进制形式为:";
    
    BinaryRecursion(n);
    return 0;
}




猜你喜欢

转载自blog.csdn.net/weixin_48180029/article/details/113775987