[C ++] Operación de bits

Cómo utilizar operaciones de bits

Operación de bits de algoritmo

1. Operación AND bit a bit (&)

Determina si es par

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

Determina si un número n es una potencia entera de 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;
}

Inserte la descripción de la imagen aquí

Calcule el número de unos en un número binario:

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

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

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

El segundo tipo:

#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. Operación OR bit a bit (|)

3. Operación OR exclusiva de bits (^)

Varias propiedades de XOR:

1. Ley conmutativa: a ^ b = b ^ a
2. Ley asociativa: (a ^ b) ^ c == a ^ (b ^ c)
3. Reflexividad: x ^ x = 0 para cualquier número x , X ^ 0 = x Por ejemplo: A ^ B ^ B = A

4. Operación de inversión (~)

5. Mover a la izquierda

Multiplica por 2

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

6. Mover a la derecha

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




Supongo que te gusta

Origin blog.csdn.net/weixin_48180029/article/details/113775987
Recomendado
Clasificación