当前位置:   article > 正文

【C++】位运算_c++位运算

c++位运算

位运算的使用方法

算法篇 位运算

1.位与运算(&)

判断是否为偶数

#include<iostream>
using namespace std;
int  main() {
	int n;
	cin >> n;
	if (n & 1)
		cout << n << "是奇数";
	else
		cout << n << "是偶数";
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

判断一个数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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

计算一个数的二进制中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;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

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

#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;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

第二种:

#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;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
在这里插入代码片
  • 1

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

#include<iostream>
using namespace std;
int  main() {
	int n;
	cin >> n;
	cout << (n << 1);
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

6.右移

整除2

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
#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;
}




  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/721740
推荐阅读
相关标签
  

闽ICP备14008679号