Ответы:
Меня немного смущает документация MSDN C #, в которой говорится, что
&
и|
являются логическими операторами,&&
а||
также условными операторами. Я продолжаю звонить&&
,||
и!
логические операторы, так что я не прав?
Нет; ты прав.
В документации MSDN есть множество мелких, в основном незначительных ошибок номенклатуры; Я пытался вытащить как можно больше из них, но в тех случаях, когда это не является вопиюще неправильным и вводящим в заблуждение, это не всегда разумное использование времени. Перейдите к спецификации, если вы хотите определенное утверждение о названии функции C #.
Итак: соответствующим полномочием является спецификация C #, которая гласит в разделе 7.11:
&
,^
И|
операторы называются логические операторы.
Затем происходит дальнейшее разбиение встроенных логических операторов на целочисленные, перечислимые, логические и логические операторы с нулевым логическим значением. Есть также определенные пользователем логические операторы; смотрите спецификацию для деталей.
В разделе 7.12 мы имеем
Эти
&&
и||
операторы называются условные логические операторы. Их также называют «короткозамкнутыми» логическими операторами.
Так что все они являются логическими операторами. Некоторые из них являются условными логическими операторами .
Что делает условные логические операторы условными ? Можно предположить, что это потому, что они обычно используются в условных выражениях ( if
) или условных выражениях ( ? :
). Настоящая причина указана в спецификации:
&&
И||
операторы являются условными версиями&
и|
операторы: операцияx && y
соответствует операциямx & y
, за исключением того, чтоy
оценивается только еслиx
не является ложным. Операцияx || y
соответствует операцииx | y
, за исключением того, чтоy
она оценивается, только еслиx
она не соответствует действительности.
Таким образом, условные логические операторы названы потому, что правый операнд вычисляется условно в зависимости от значения левого операнда.
Мы можем увидеть это более наглядно, заметив, что условные логические операторы являются просто «синтаксическими сахарами» для условных выражений . x && y
это просто более приятный способ написания x ? y : false
и x || y
просто более приятный способ написания x ? true : y
. Условные логические выражения на самом деле являются условными выражениями.
Существует также пользовательская форма условного логического оператора, и она немного сложнее. Подробности смотрите в спецификации.
Дальнейшее чтение, если эта тема вас интересует:
В C # это все логические операторы.
int x = 0xABCD & 0xFF // x == 0xCD
&&
и ||
называются « условными логическими операторами», потому что они являются короткими замыканиями.
bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated,
// because x == 0xEF is false
Обратите внимание, что эта терминология отличается от языка к языку. В C и C ++ &&
и ||
есть просто логические операторы. В Java &
и |
называются побитовые операторы , а C и C ++ классифицируют их как арифметические операторы .
Дело в том, что &
и |
являются побитовыми операторами, то есть они применяются к битовым строковым значениям и дают их. И побитовый это очень используемый термин среди программистов.
Например 0xff & 0x00 == 0x00
, пока 0xff | 0x00 == 0xff
.
И &&
и ||
применяются к условиям, и дают обычные значения условий; т.е. true
и false
.
Например true && false == false
, пока true || false == true
.
Поэтому &&
и ||
можно было бы назвать условные операторы, хотя это не обычный термин среди программистов.
Конечно, каждый программист на C, C ++, Java и C # знает все это. Но я думаю, что это неправильно понято, потому что «условный оператор» не является термином, часто используемым нами, программистами.
|
взаимозаменяемы||
, даже если во многих случаях они могут быть взаимозаменяемы без видимых изменений в поведении программы.