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