关于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。

posted @ 2021-09-24 18:38  计算机知识杂谈  阅读(165)  评论(0编辑  收藏  举报