Как &
и &&
оператор and , двойной оператор является оператором «короткого замыкания».
Например:
if(condition1 || condition2 || condition3)
Если условие 1 истинно, условия 2 и 3 НЕ будут проверены.
if(condition1 | condition2 | condition3)
Это проверит условия 2 и 3, даже если 1 уже верно. Поскольку ваши условия могут быть довольно дорогими функциями, вы можете получить хороший прирост производительности, используя их.
Есть одна большая оговорка, NullReferences или подобные проблемы. Например:
if(class != null && class.someVar < 20)
Если class равен нулю, оператор if остановится после того, class != null
как false. Если вы используете только &, он попытается проверить, class.someVar
и вы получите хороший NullReferenceException
. С оператором «Ор» это может быть не такой уж ловушкой, так как маловероятно, что вы вызовете что-то плохое, но об этом следует помнить.
Тем не менее, никто никогда не использует одиночный оператор &
или |
операторы, если только у вас нет схемы, в которой каждое условие является функцией, которая должна выполняться. Звучит как запах дизайна, но иногда (редко) это чистый способ делать вещи. &
Оператор не «запустить эти 3 функции, и если один из них возвращает ложь, выполнить еще блок», в то время как |
это «только запустить еще блок , если ни один возвращение ложным» - может быть полезным, но , как сказал, часто это дизайн запах.
Существует и второе использование оператора |
and &
: побитовые операции .
&
и|
как условные операторы - это взлом, и они будут иметь проблемы, если им когда-либо понадобится использование C / C ++:1 && 2
true, а1 & 2
false.&
чтобы передать значение, отличное от того, что оно почти всегда означает: побитовый-и) .|| логический оператор ИЛИ Похоже, вы в основном знаете, что это такое. Используется в условных выражениях, таких как if, while и т. Д.
Значение true, если либо условие1 ИЛИ условие2 верно.
| является побитовым оператором ИЛИ. Он используется для работы на двух номерах. Вы смотрите на каждый бит каждого числа в отдельности и, если один из битов равен 1 хотя бы в одном из чисел, то результирующий бит также будет равен 1. Вот несколько примеров:
Надеюсь, это имеет смысл.
Поэтому, чтобы ответить на два последних вопроса, я бы не сказал, что есть какие-то предостережения, кроме «знайте разницу между двумя операторами». Они не взаимозаменяемы, потому что они делают две совершенно разные вещи.
источник
Один из них - «побитовый или».
Другой логика или.
источник
|
также может использоваться наbool
типах без короткого замыкания.Хороший вопрос. Эти два оператора работают одинаково в PHP и C #.
|
является побитовым ИЛИ. Он будет сравнивать два значения по их битам. Например, 1101 | 0010 = 1111. Это очень полезно при использовании битовых опций. Например, чтение = 01 (0X01) запись = 10 (0X02) чтение-запись = 11 (0X03). Одним из полезных примеров будет открытие файлов. Простой пример будет:||
это логическое ИЛИ. Именно так большинство людей думают об ИЛИ и сравнивают две ценности, основываясь на их истинности. Например, я иду в магазин, или я пойду в торговый центр. Это тот, который чаще всего используется в коде. Например:Ресурс PHP: http://us3.php.net/language.operators.bitwise
Ресурсы C #: http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx
источник
|
это логично или применительно к логическим значениям . Как указано в вашей ссылке. На практике конечный результат такой же, как если бы он был побитовым оператором, потому что побитовые значенияtrue
иfalse
таковы, что побитовые или их значения дают точно такой же результат, как и логический. Это(int)(bool1 | bool2)
==((int)bool1) | ((int)bool2)
.Простой пример в Java
вывод :
источник
& - (Условие 1 и Условие 2): проверяет оба случая, даже если первый неверен
&& - (Условие 1 && Условие 2): не беспокойтесь о проверке второго случая, если первый случай ложный
&& - оператор заставит ваш код работать быстрее, профессионально и редко используется
| - (Условие 1 | Условие 2): проверяет оба случая, даже если случай 1 истинен
|| - (Условие 1 || Условие 2): не беспокойтесь о проверке второго случая, если первый - правда
|| - оператор заставит ваш код работать быстрее, профессионально | редко используется
источник
rarely used
? Все зависит от того, что вы хотите или нужно сделать.Одиночная труба, |, является одним из побитовых операторов.
Из Википедии:
источник
По их математическому определению OR и AND являются бинарными операторами; они проверяют условия LHS и RHS независимо, аналогично | и &.
|| и && изменяют свойства операторов OR и AND, останавливая их, когда условие LHS не выполняется.
источник
| оператор выполняет побитовое ИЛИ своих двух операндов (то есть обе стороны должны иметь значение false, чтобы он возвращал false), в то время как || Оператор будет оценивать только второй оператор, если это необходимо.
http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx
источник
Опорная труба "|" является «побитовым» или и должен использоваться только тогда, когда вы знаете, что делаете. Двойная труба "||" является логическим или, и может использоваться в логических утверждениях, таких как «x == 0 || x == 1».
Вот пример того, что поразрядно или делает: если a = 0101 и b = 0011, то a | b = 0111. Если вы имеете дело с логической системой, которая обрабатывает любое ненулевое значение как истинное, то побитовое или будет действовать так же, как логическое или, но его аналог (побитовое и, "&") не будет. Также побитовый или не выполняет оценку короткого замыкания.
источник
bool
типах без короткого замыкания.Одиночная труба (|) является побитовым оператором ИЛИ .
Два канала (||) - логический оператор ИЛИ.
Они не являются взаимозаменяемыми.
источник