Ответы:
Меня немного смущает документация 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 # знает все это. Но я думаю, что это неправильно понято, потому что «условный оператор» не является термином, часто используемым нами, программистами.
|взаимозаменяемы||, даже если во многих случаях они могут быть взаимозаменяемы без видимых изменений в поведении программы.