В чем разница между -1 и ~ 0 - PullRequest
1 голос
/ 18 июля 2011

Название действительно говорит само за себя: в чем разница между минус один и тильда (одно дополнение) ноль?

Вопрос возник во время обсуждения наилучшего способа указать битовую маску, в которойвсе биты установлены.Что из нижеперечисленного лучше?

int func(int value, int mask = -1) {
    return (value & mask);
}

или

int func(int value, int mask = ~0) {
    return (value & mask);
}

Есть ли другие варианты использования, где это было бы наоборот?

Обновление: Естьаналогичная дискуссия на эту тему обсуждалась на stackoverflow.com / q / 809227/34509 , которую я пропустил во время моего предыдущего исследования.Спасибо Йоханнесу Шаубу за то, что он указал на это.

Ответы [ 3 ]

8 голосов
/ 18 июля 2011

Первый вариант основан на представлении дополнения 2 отрицательных чисел, которое не обязательно используется. 1-е дополнение тоже можно использовать ... или другую кодировку. Мой голос за второй подход

3 голосов
/ 18 июля 2011

Второй пример более понятен в отношении того, что вы пытаетесь проверить.

1 голос
/ 18 июля 2011

Оба одинаковы. Кроме того, -1 не подходит к unsigned int без предупреждения.

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