位元
%2 /=2 & | << >> __builtin_popcount
位元運算
/*
* example
*/
#include <iostream>
using namespace std;
int main() {
int a = 5; // 0101
int b = 3; // 0011
cout << a | b << endl;
// AND
cout << a & b << endl;
// XOR
cout << a ^ b << endl;
// NOT
cout << ~a << endl;
return 0;
}
除2法
/*
* zerojudge
* a414. 位元運算之進位篇
* C++
* AC (0.9s, 332KB)
*/
#include<bits/stdc++.h>
using namespace std;
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int main(){
fastio;
int n;
while(cin >> n){
if(n==0){
break;
}
//
int cnt=0;
while(n){
if(n%2==1){
cnt++;
}else{
break;
}
n/=2;
}
cout << cnt << endl;
}
}
求二進制數字中幾個 1
/*
* example
*/
#include <iostream>
using namespace std;
int main() {
int num;
cin >> num;
int count = __builtin_popcount(num);
cout << count << endl;
return 0;
}
位元掩碼
/*
* AP325
* Q-2-7. 互補團隊
*/
#include<bits/stdc++.h>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
vector<int> mask(n, 0);
for (int i = 0; i < n; i++) {
string s;
cin >> s;
for (char c : s) {
mask[i] |= (1 << (c - 'A'));
}
}
int ans = 0;
for (int i = 0; i < n; i++) {
for (int k = i + 1; k < n; k++) {
int combined_mask = mask[i] | mask[k];
if (__builtin_popcount(combined_mask) == m) {
ans++;
}
}
}
cout << ans/2 << endl;
return 0;
}
Last updated
Was this helpful?