位运算
视频讲解
🎥 视频讲解
位运算
在计算机中,所有数据都是以二进制形式存储的。位运算就是直接对二进制位进行操作的运算。
例题1
参考代码
参考实现
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int ans = 0;
for (int i = 30; i >= 0; i--) {
if ((n >> i) & 1) {
ans++;
}
}
cout << ans;
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int ans = 0;
for (int i = 30; i >= 0; i--) {
if (((n >> i) & 1) == 1) {
ans++;
}
}
System.out.println(ans);
}
}
n = int(input())
ans = 0
for i in range(30, -1, -1):
if (n >> i) & 1:
ans += 1
print(ans)
例题2
参考实现
参考实现
#include <bits/stdc++.h>
using namespace std;
int n, q;
int main() {
cin >> n >> q;
for (int i = 1; i <= q; i++) {
int x;
cin >> x;
if (x == 1) {
int k;
cin >> k;
cout << ((n >> k) & 1) << endl;
}
if (x == 2) {
int l, r;
cin >> l >> r;
int p = (1 << (r + 1)) - 1;
int t = (1 << l) - 1;
p -= t;
cout << (n ^ p) << endl;
n ^= p;
}
if (x == 3) {
int l, r;
cin >> l >> r;
int p = (1 << (r + 1)) - 1;
int t = (1 << l) - 1;
p -= t;
cout << (n | p) << endl;
n |= p;
}
if (x == 4) {
int l, r;
cin >> l >> r;
int p = (1 << (r + 1)) - 1;
int t = (1 << l) - 1;
p -= t;
p = ~p;
cout << (n & p) << endl;
n &= p;
}
if (x == 5) {
cout << (n & -n) << endl;
}
}
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int q = sc.nextInt();
while (q-- > 0) {
int x = sc.nextInt();
if (x == 1) {
int k = sc.nextInt();
System.out.println((n >> k) & 1);
}
if (x == 2) {
int l = sc.nextInt();
int r = sc.nextInt();
int p = (1 << (r + 1)) - 1;
int t = (1 << l) - 1;
p -= t;
System.out.println(n ^ p);
n ^= p;
}
if (x == 3) {
int l = sc.nextInt();
int r = sc.nextInt();
int p = (1 << (r + 1)) - 1;
int t = (1 << l) - 1;
p -= t;
System.out.println(n | p);
n |= p;
}
if (x == 4) {
int l = sc.nextInt();
int r = sc.nextInt();
int p = (1 << (r + 1)) - 1;
int t = (1 << l) - 1;
p -= t;
p = ~p;
System.out.println(n & p);
n &= p;
}
if (x == 5) {
System.out.println(n & -n);
}
}
}
}
n, q = map(int, input().split())
for _ in range(q):
x = int(input().split()[0])
if x == 1:
k = int(input())
print((n >> k) & 1)
if x == 2:
l, r = map(int, input().split())
p = (1 << (r + 1)) - 1
t = (1 << l) - 1
p -= t
print(n ^ p)
n ^= p
if x == 3:
l, r = map(int, input().split())
p = (1 << (r + 1)) - 1
t = (1 << l) - 1
p -= t
print(n | p)
n |= p
if x == 4:
l, r = map(int, input().split())
p = (1 << (r + 1)) - 1
t = (1 << l) - 1
p -= t
p = ~p
print(n & p)
n &= p
if x == 5:
print(n & -n)