C#

Чем отличается команда & от команды &&? Чем отличается команда | от команды ||?

& и | - математические операции, применяемые к целым числам. Побитовое логическое умножение (and) и побитовое логическое сложение (or). Результат & и | - целое число.

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

&& и || логические операции. Их результат - true / false. Операнды && и || вычисляются строго слева направо и если результат операции понятен после вычисления левого операнда, правый операнд не вычисляется.

a && b эквивалентно (a? b : false) - b вычисляется только если a == true

a || b эквивалентно (a? true : b) - b вычисляется только если a == false
(Vo)/ Т /алексей Кравченко.
(Vo)/ Т /алексей Кравченко.
68 775
Лучший ответ
Побитовые И и ИЛИ и просто логические И и ИЛИ. Отличия серьезные, побитовые операторы И, ИЛИ, НЕ имеют только косвенное сходстство с обычными булевыми И, ИЛИ, НЕ.
Я сам с побитовыми операциями решил всё же разобраться не так уж и давно. До этого спокойно жил без них, в общем-то это тема не первостепенной важности
Игорь Шахов
Игорь Шахов
52 596
Операции && и II — ленивые. Они считают второй операнд только в том случае, если результат операции неясен из первого операнда.

true && false — первый операнд истина, поэтому результат зависит от второго.
false && true — первый операнд ложь, поэтому результат конъюнкции тоже ложь; второй операнд не имеет значения, его можно не считать.

false || true — первый операнд ложь, поэтому результат зависит от второго.
true || false — первый операнд истина, поэтому результат дизъюнкции тоже истина; второй операнд не важен, его можно не считать.

Это может быть важно, если вычисление второго операнда имеет побочные эффекты или может привести к ошибке, которой желательно избежать.

Например, у нас есть массив, и мы хотим проверить его пятый элемент, у которого индекс равен 4. Но сперва нам надо убедиться, что в массиве больше четырех элементов, и только после этого делать проверку.

if (a.Length > 4 && a[4] == "Мяу") {…}

Если длина массива больше 4, то идет обращение к a[4].
В противном случае проверка a[4] не происходит, и условие нарушается в силу недостаточной длины массива. Но без ошибки.