Разница между | и || или & и && для сравнения

Возможный дубликат:
Ясное, непрофессионал & rsquo; объяснение разницы между | и || в С#?

В чем разница между сравнением с | и || или, и && & в С# и Javascript?

Примеры:

if(test == test1 | test1 == test2) or if(test == test1 || test1 == test2)
if(test == test1 & test1 == test2) or if(test == test1 && test1 == test2)

Ответ 1

в C (и, возможно, на других языках) одиночный | или & является поразрядным сравнением.
Двойной || или && является логическим сравнением.
Изменить: обязательно прочитайте комментарий Мехрдада ниже относительно "без короткого замыкания"

На практике, поскольку true часто эквивалентен 1, а false часто эквивалентен 0, поразрядные сравнения иногда могут быть действительными и возвращать точно такой же результат.

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

if ( (altitide > 10000) & (knots > 100) )
...

Ответ 2

& и | являются побитовыми операторами, которые могут работать как с целыми, так и с булевыми аргументами, и && и || являются логическими операторами, которые могут работать только с логическими аргументами. На многих языках, если оба аргумента являются логическими, ключевое различие заключается в том, что логические операторы будут выполнять оценку короткого замыкания и не оценивать второй аргумент, если для определения ответа достаточно первого аргумента (например, в случае && если первый аргумент ложный, второй аргумент не имеет значения).

Ответ 3

& и | являются бинарными операторами, а || и && являются логическими.

Большая разница:
(1 и 2) равно 0, false (1 & 2) истинно

Ответ 4

(Предполагая C, С++, Java, JavaScript)

| и & являются побитовыми операторами, а || и && являются логическими операторами. Обычно вы хотите использовать || и && для операторов и циклов и т.д. (Т. Е. Для ваших примеров выше). Побитовые операторы предназначены для установки и проверки битов в битмаксах.

Ответ 5

Экземпляр, в котором вы используете один символ (например, или или amp;), является поразрядным сравнением результатов. Пока ваш язык оценивает эти выражения двоичным значением, они должны возвращать те же результаты. Однако, как наилучшая практика, вы должны использовать логический оператор как то, что вы имеете в виду (я думаю).

Ответ 7

The и и | обычно являются побитовыми операциями.

Где как && и || обычно являются логическими операциями.

Для целей сравнения, это прекрасно, если все возвращает либо 1, либо 0. В противном случае он может возвращать ложные срабатывания. Вы должны избегать этого, хотя для предотвращения трудночитаемых ошибок.