В чем разница между -1 и ~0

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

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

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

или же

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

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

Обновление: аналогичное обсуждение этой темы проводилось на /questions/26009014/bezopasno-li-ispolzovat-1-chtobyi-ustanovit-vse-bityi-v-true, которое я пропустил во время моего предыдущего исследования. Спасибо Йоханнесу Шаубу за то, что указал на это.

3 ответа

Решение

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

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

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

Другие вопросы по тегам