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