关闭最右边的设置位

Turn off the rightmost set bit

int n;
        cin>>n;
        int i=1,m=1;
        while(n&i==0)
        {
            i=i<<1;
            m++;
            
        }
        //now flip mth set bit from right;
        int ans=n^(1<<(m-1));
        cout<<ans<<endl;

上面代码中取消设置整数最右边的位有什么错误?

在 C++ 中,== 运算符的 precedence 高于 & 运算符,因此 n&i==0 不是您想要的。 使用 (n&i)==0 而不是那个。