13 ответов:
как
&и&&оператор, двойной оператор оператор "короткого замыкания".например:
if(condition1 || condition2 || condition3)если условие 1 истинно, условие 2 и 3 не будут проверены.
if(condition1 | condition2 | condition3)это проверит условия 2 и 3, даже если 1 уже верно. Поскольку ваши условия могут быть довольно дорогими функциями, вы можете получить хороший прирост производительности, используя их.
есть одно большое предостережение, NullReferences или подобное проблемы. Например:
if(class != null && class.someVar < 20)если класс равен null, то оператор if-остановится после
class != nullложно. Если вы используете только&, он попытается проверитьclass.someVarи вы получите хорошийNullReferenceException. С оператором Or это может быть не так много ловушки, поскольку маловероятно, что вы запускаете что-то плохое, но это то, что нужно иметь в виду.никто никогда не использует один
&или|операторы, хотя, если у вас нет дизайна, где каждое условие является функцией, которая имеет быть казненным. Звучит как дизайн запах, но иногда (редко) это чистый способ сделать вещи. Элемент&оператор выполняет "запуск этих 3 функций, и если одна из них возвращает false, выполните блок else", в то время как|делает "только запустить блок else, если никто не возвращает false" - может быть полезно, но, как уже было сказано, часто это дизайн запах.есть второе использование
|и&оператора, хотя: Побитовые Операции.
|| является логическим оператором OR. Похоже, вы в основном знаете, что это такое. Он используется в условных операторах, таких как if, while и т. д.
condition1 || condition2возвращает значение true, если условие1 или условие2 истинно.
| - побитовый оператор OR. Он используется для работы с двумя числами. Вы смотрите на каждый бит каждого числа индивидуально, и если один из битов равен 1 по крайней мере в одном из чисел, то результирующий бит будет также равен 1. Вот некоторые из них примеры:
A = 01010101 B = 10101010 A | B = 11111111 A = 00000001 B = 00010000 A | B = 00010001 A = 10001011 B = 00101100 A | B = 10101111надеюсь, что это имеет смысл.
поэтому, чтобы ответить на последние два вопроса, я бы не сказал, что есть какие-либо предостережения, кроме "знать разницу между двумя операторами.- Они не взаимозаменяемы, потому что делают две совершенно разные вещи.
хороший вопрос. Эти два оператора работают одинаково в PHP и C#.
| - это побитовое или. Он будет сравнивать два значения по их битам. Например, 1101 / 0010 = 1111. Это чрезвычайно полезно при использовании битовых опций. Например, Read = 01 (0X01) Write = 10 (0X02) Read-Write = 11 (0X03). Одним из полезных примеров может быть открытие файлов. Простой пример:
File.Open(FileAccess.Read | FileAccess.Write); //Gives read/write access to the file|| - логическое или. Это то, как большинство людей думают или и сравнивает два значения на основе их истина. Например, я иду в магазин или я пойду в торговый центр. Это тот, который чаще всего используется в коде. Е. Г.
if(Name == "Admin" || Name == "Developer) { //allow access } //checks if name equals Admin OR Name equals DeveloperPHP ресурс: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
простой пример в java
public class Driver { static int x; static int y; public static void main(String[] args) throws Exception { System.out.println("using double pipe"); if(setX() || setY()) {System.out.println("x = "+x); System.out.println("y = "+y); } System.out.println("using single pipe"); if(setX() | setY()) {System.out.println("x = "+x); System.out.println("y = "+y); } } static boolean setX(){ x=5; return true; } static boolean setY(){ y=5; return true; } }выход :
using double pipe x = 5 y = 0 using single pipe x = 5 y = 5
& - (Условие 1 & Условие 2): проверяет оба случая, даже если первый из них является ложным
&& - (Условие 1 & & Условие 2): Не беспокойтесь, чтобы проверить второй случай, если случай один это ложь
&& - оператор сделает ваш код работать быстрее, профессионально и редко используется
| - (Условие 1 / Условие 2): проверяет оба случая, даже если случай 1 истинен
| / - (Условие 1 / / Условие 2): не потрудитесь проверить второй случай, если первый это правда
|| - оператор сделает ваш код работать быстрее, профессионально | редко используется
единственная труба,|, является одним из побитовое операторы.
Из Википедии:
в семействе языков программирования C побитовым оператором OR является " | " (pipe). Опять же, этот оператор не следует путать с его логическим "логическим или" аналогом, который обрабатывает его операнды как логические значения и записывается "||" (два канала).
по их математическому определению, или и и являются двоичными операторами; они проверяют условия LHS и RHS независимо, аналогично | и &.
| / and && изменяет свойства операторов 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. Если вы имеете дело с логической системой, которая рассматривает любое ненулевое значение как истинное, то побитовое или будет действовать так же, как логическое ИЛИ, но его аналог (побитовое и,"&") не будет. Также побитовое или не выполняет оценку короткого замыкания.
одна труба ( | ) является побитовое или оператор.
два канала ( | | ) - это логический оператор OR.
Они не заменимы.
|| (две трубы) обычно логическое или в то время как | (одна труба) является binary или. С моей головы я не могу думать о том, что разница будет большой (кроме тех случаев, когда вы назначаете результат на что-то другое). Однако я уверен, что у кого-то еще будет ситуация, когда это имеет значение.
Edit: Вау, шесть других ответов за то время, которое мне потребовалось, чтобы написать это.
побитовое Or (|) и логическое(||)! Подумайте о логике как о сопоставимых объектах в Java, сравнивая некоторые различимые "части", в то время как побитовый оператор смотрит на эти объекты и вместо того, чтобы видеть, являются ли они визуально близнецами (как это делает логика), делает образец ДНК и смотрит на 0 и 1 вместо этого.
Comments