Как всегда, когда люди начинают пытаться перефразировать ссылочный материал, они почти неизменно получают что-то не так или предоставляют неполное описание.
Apple предоставляет полное описание системы управления памятью Какао в Руководство по программированию управления памятью для Какао , в конце которого существует краткая, но точная сводка Правила .
управления памятью
на C (и, возможно, на других языках) одиночное |
или &
является побитовым сравнением.
Двойное число ||
или &&
является логическим сравнением.
Редактировать: Обязательно прочтите комментарий Мердада ниже относительно «без короткого замыкания»
На практике, поскольку true
часто эквивалентно 1
, а false
часто эквивалентно 0
, побитовые сравнения иногда могут быть действительными и возвращают точно тот же результат .
Однажды был критически важный программный компонент, на котором я запускал статический анализатор кода, и он указывал, что побитовое сравнение использовалось там, где должно было быть логическое сравнение. Поскольку он был написан на C и из-за организации логических сравнений, программа отлично работала с любым из них. Пример:
if ( (altitide > 10000) & (knots > 100) )
...
& и | - побитовые операторы, которые могут работать как с целочисленными, так и с логическими аргументами, а также && и || являются логическими операторами, которые могут работать только с логическими аргументами. Во многих языках, если оба аргумента являются логическими, ключевое отличие состоит в том, что логические операторы будут выполнять оценку короткого замыкания, а не оценивать второй аргумент, если первого аргумента достаточно для определения ответа (например, в случае &&, если первый аргумент неверен, второй аргумент не имеет значения).
& и | являются бинарными операторами, а || и && являются логическими.
Большая разница:
(1 и 2) равно 0, ложь
(1 && 2) верно
(Предполагается, что C, C ++, Java, JavaScript)
|
и &
- побитовые операторы, а ||
и ] &&
- логические операторы. Обычно вы хотите использовать ||
и &&
для операторов if, циклов и тому подобного (например, для ваших примеров выше). Поразрядные операторы предназначены для установки и проверки битов в битовых масках.
Экземпляр, в котором вы используете один символ (т.е. | или &), представляет собой побитовое сравнение результатов. Пока ваш язык оценивает эти выражения до двоичного значения, они должны возвращать те же результаты. Однако лучше всего использовать логический оператор в том смысле, который вы имеете в виду (я думаю).
& и | обычно являются побитовыми операциями.
Где как && и || обычно являются логическими операциями.
Для сравнения это прекрасно, при условии, что все возвращает либо 1, либо 0. В противном случае он может возвращать ложные срабатывания. Однако этого следует избегать, чтобы предотвратить трудные для чтения ошибки.