关于x&x-1
这是今年CSP-J 2021初赛,阅读程序写结果的第一大题中涉及的一个位运算。
x&x-1
#include<bits/stdc++.h>
using namespace std;
void reverse(string &s){
int i=0,j=s.size();
while(i<j){
swap(s[i],s[j]);
++i;--j;
}
}
string dec2bin(int dec){
string s;char c[100];
int i=0;
while(dec){
c[i]=dec%2+'0';
++i;
dec/=2;
}
s=c;
reverse(s);
return s;
}
int main(){
int i;
cin>>i;
cout<<dec2bin(i)<<endl;
cout<<dec2bin(i&i-1)<<endl;
}
由上面代码可以得出,i&i-1用来去掉二进制中最后一个1。