В чем разница между -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
без предупреждения.