[C++] Bit operation

How to use bit operations

Algorithm bit operation

1. Bitwise AND operation (&)

Determine whether it is even

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

Determine whether a number n is an integer power of 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;
}

Insert picture description here

Calculate the number of 1s in a binary number:

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

Insert picture description here
Insert picture description here

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

The second type:

#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. Bitwise OR operation (|)

3. Bit exclusive OR operation (^)

Several properties of XOR:

1. Commutative law: a ^ b=b ^ a
2. Associative law: (a ^ b) ^ c == a^ (b ^ c)
3. Reflexivity: x^ x=0 for any number x ,X^ 0=x For example: A^B ^ B = A

4. Inversion operation (~)

5. Move left

Multiply by 2

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

6. Move right

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




Guess you like

Origin blog.csdn.net/weixin_48180029/article/details/113775987
Recommended