我正准备参加编程比赛,我偶然发现了下面的问题。
void main(){
int number, result;
scanf("%d",&number);
result=number-(number&-number); //this is what i'm struggling to understand
printf("%d",result);
}
请注意在注释行中使用“& - ”。我无法弄清楚它的功能。我尝试使用谷歌搜索和逆向工程,但我找不到任何东西。
此外,问题本身并不是关于确切的输出,因为变量“数字”是动态的。我只需要了解“& - ”部分的作用。 谢谢!
答案 0 :(得分:6)
这是一个二元AND运算符。表达式x & -x
除了数字x中最右边的1位之外的所有内容都清零。然后x - (x & -x)
仅将该位清零,因此结果是原始数字,最右边的1位清零。
答案 1 :(得分:1)
&符是二元AND运算符。减号只是一个常规减号。感谢@tkausl
答案 2 :(得分:0)
(number& -number)表示(数字&( - 数字))