Должен ли я проверить, равен ли он 1 или не равен 0?

На днях я кодировался, написав пару операторов if с целыми числами, которые всегда либо 0, либо 1 (практически действующие как bool s). Я спросил себя:

При тестировании на положительный результат, что лучше; тестирование для int == 1 или int != 0?

Например, если задано int n, если я хочу проверить, если он true, следует ли использовать n == 1 или n != 0?

Есть ли какая-либо разница в отношении скорости, мощности обработки и т.д.

Пожалуйста, игнорируйте тот факт, что int может быть больше/меньше 1/0, это не имеет значения и не происходит.

Ответ 1

Человеческие мозги улучшают операторы процесса, которые не содержат отрицаний, что делает "int == 1" лучшим способом.

Ответ 2

Это действительно зависит. Если вы используете язык, поддерживающий booleans, вы должны использовать логическое, а не целое число, то есть:

if (value == false)

или

if (value == true)

Говоря, что с реальными булевыми типами он совершенно корректен (и обычно приятнее) просто написать:

if (!value)

или

if (value)

В большинстве современных языков действительно очень мало причин использовать когда-либо целое число для булевой операции.

При этом, если вы используете язык, который не поддерживает логические значения напрямую, лучший вариант здесь действительно зависит от того, как вы определяете true и false. Часто false равно 0, а true - это что-то иное, чем 0. В этой ситуации используйте if (i == 0) (для ложной проверки) и if (i != 0) для проверки подлинности.

Если вам гарантировано, что 0 и 1 являются единственными двумя значениями, я бы, вероятно, использовал if (i == 1), поскольку отрицание более сложное и, скорее всего, приведет к ошибкам обслуживания.

Ответ 3

Если вы работаете со значениями, которые могут быть только 1 или 0, то я предлагаю вам использовать логические значения для начала, а затем просто сделать if (bool) или if (!bool).

Ответ 4

В языке, где int, который не является 0, представляет собой логическое значение "true", а 0 "false", например C, я буду использовать if (int != 0), потому что он представляет то же значение, что и if (int), тогда как int == 1 представляет собой целое значение, равное 1, а не логическое значение true. Это может быть только я. В языках, поддерживающих логический тип, всегда используйте его, а не int.

Ответ 5

А глупо вопрос. Если вы тестируете на 1, проверьте на 1, если вы тестируете нулевое значение, выполните проверку на нуль.

Добавление оператора else может сделать выбор произвольным. Я бы выбрал, что имеет наибольший смысл или имеет более контекстуальное значение, стандартное или "естественное" поведение, предлагаемое ожидаемой частотой появления, например.

Этот выбор между int == 0 и int != 1 вполне может сводиться к субъективным оценкам, о которых, вероятно, не стоит беспокоиться.

Ответ 6

Две точки:

1) Как отмечалось выше, более явным является выигрыш. Если вы добавите что-то в пустой список, вы не только хотите, чтобы его размер был не нулевым, но вы также хотите, чтобы он был явно 1.

2) Вы можете захотеть сделать   (1 == int) Таким образом, если вы забудете = вы получите ошибку компиляции, а не сеанс отладки.

Ответ 7

Если честно, если значение int равно 1 или 0, вы можете даже сказать:

if (int)

и это будет то же самое, что сказать

if (int != 0)

но вы, вероятно, захотите использовать

if (int == 1)

потому что не ноль потенциально мог бы дать ответу что-то отличное от 1, даже если вы сказали, что не беспокоитесь об этом.

Ответ 8

Если возможны только два значения, я бы использовал первый:

if(int == 1)

потому что он более явный. Если бы не было ограничений на значения, я бы подумал иначе.

Ответ 9

IF INT IS 1
NEXT SENTENCE
ELSE MOVE "INT IS NOT ONE" TO MESSAGE.

Ответ 10

Как говорили другие, использование == часто легче читать, чем при использовании !=.

Тем не менее, большинство процессоров имеют конкретную операцию сравнения с нулем. Это зависит от конкретного компилятора, процессора и т.д., Но при использовании != 0 over == 1 может быть почти неимоверное преимущество в скорости.

Большинство языков позволят вам использовать if (int) и if (!int), хотя это и более удобочитаемо, и дает вам этот незначительный бонус скорости.

Ответ 11

Я параноик. Если значение равно либо 0 или 1, то оно может быть 2. Может быть, не сегодня, может быть, не завтра, но некоторые программисты-программисты собираются сделать что-то странное в подклассе. Иногда я совершаю ошибки сам (не рассказываю своему работодателю). Итак, сделайте код, скажите, скажите мне, что значение равно либо 0 или 1, иначе оно плачет в мумию.

if (i == 0) {
    ... 0 stuff ...
} else if (i == 1) {
    ... 1 stuff ...
} else {
    throw new Error();
}

(Возможно, вы предпочитаете switch - я нахожу, что его синтаксис в фигурных скобках слишком тяжелый.)

Ответ 12

При использовании целых чисел в качестве булевых элементов я предпочитаю их интерпретировать следующим образом: false = 0, true = non-zero.

Я хотел бы написать оператор условия как int == 0 и int!= 0.

Ответ 13

Я бы сказал, что это зависит от семантики, если вы условие означает

while ( ! abort ) отрицание в порядке.

if ( quit ) break; также будет нормально.

Ответ 14

if( is_numeric( $int ) ) { its a number }
elseif( !$int ) { $int is not set or false }
else { its set but its not a number }

конец обсуждения: P

Ответ 15

Я согласен с тем, что большинство людей сказали в этом посте. Гораздо эффективнее использовать логические значения, если у вас есть одна из двух различных возможностей. Это также упрощает чтение и интерпретацию кода.

if (bool) {...}

Ответ 16

Я был из мира c. Сначала я мало что понимаю о objective-c. Через некоторое время я предпочитаю что-то вроде:

if (int == YES)

или

if (int == NO)

в c, то есть:

if (int == true)
if (int == false)

в эти дни я использую varchar вместо integer в качестве клавиш таблицы, например.

 name   marital_status
------  --------------
 john      single
 joe       married

намного лучше, чем:

 name   marital_status
------  --------------
 john         S
 joe          M

или

 name   marital_status
------  --------------
 john         1
 joe          2

Ответ 17

(Предполагая, что ваши int могут быть только 1 или 0). Оба утверждения логически эквивалентны. Я бы рекомендовал использовать синтаксис ==, хотя, поскольку я думаю, что это яснее для большинства людей, когда вы не вводите ненужных отрицаний.