Чего добивается использование амперсанда (&) с оператором минус? - PullRequest
0 голосов
/ 02 мая 2018

Я готовлюсь к соревнованию по программированию и наткнулся на вопрос ниже.

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

Обратите внимание на использование «& -» в закомментированной строке. Я не мог понять его функцию. Я попробовал поискать в Google и реверс-инжиниринг, но ничего не смог найти.

Кроме того, сам вопрос не о точном выводе, потому что переменная "число" является динамической. Мне просто нужно узнать, что делает часть "& -". Спасибо!

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

(число & -номер) означает (число & (-номер))

0 голосов
/ 02 мая 2018

Это двоичный оператор AND. Выражение x & -x обнуляет все, кроме крайнего правого 1-битного числа x. Затем x - (x & -x) обнуляет только этот бит, поэтому результатом является исходное число с очищенным крайним справа 1-битом.

0 голосов
/ 02 мая 2018

Амперсанд - это двоичный оператор AND. Минус это просто обычный минус. Благодаря @ tkausl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...