Различие между | и || или и и && для сравнения [дубликат]

Как всегда, когда люди начинают пытаться перефразировать ссылочный материал, они почти неизменно получают что-то не так или предоставляют неполное описание.

Apple предоставляет полное описание системы управления памятью Какао в Руководство по программированию управления памятью для Какао , в конце которого существует краткая, но точная сводка Правила .

управления памятью

37
задан Community 23 May 2017 в 11:54
поделиться

7 ответов

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

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

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

if ( (altitide > 10000) & (knots > 100) )
...
32
ответ дан 27 November 2019 в 04:34
поделиться

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

29
ответ дан 27 November 2019 в 04:34
поделиться

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

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

8
ответ дан 27 November 2019 в 04:34
поделиться

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

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

3
ответ дан 27 November 2019 в 04:34
поделиться

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

1
ответ дан 27 November 2019 в 04:34
поделиться
1
ответ дан 27 November 2019 в 04:34
поделиться

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

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

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

0
ответ дан 27 November 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: