使用带有减号运算符的&符号(&)可以实现什么?

时间:2018-05-02 17:43:52

标签: c operators ampersand

我正准备参加编程比赛,我偶然发现了下面的问题。

void main(){
    int number, result;
    scanf("%d",&number);
    result=number-(number&-number); //this is what i'm struggling to understand
    printf("%d",result);  
}

请注意在注释行中使用“& - ”。我无法弄清楚它的功能。我尝试使用谷歌搜索和逆向工程,但我找不到任何东西。

此外,问题本身并不是关于确切的输出,因为变量“数字”是动态的。我只需要了解“& - ”部分的作用。 谢谢!

3 个答案:

答案 0 :(得分:6)

这是一个二元AND运算符。表达式x & -x除了数字x中最右边的1位之外的所有内容都清零。然后x - (x & -x)仅将该位清零,因此结果是原始数字,最右边的1位清零。

答案 1 :(得分:1)

&符是二元AND运算符。减号只是一个常规减号。感谢@tkausl

答案 2 :(得分:0)

(number& -number)表示(数字&( - 数字))