В чем разница между | и || или операторы?

Я всегда использовал || (две вертикальные 9X_php-fpm черты) в выражениях ИЛИ, как в C#, так и 9X_php.ini в PHP. Иногда я вижу, что используется одна 9X_php-oop труба: |. В чем разница между этими двумя 9X_php-frameworks обычаями? Есть ли какие-либо предостережения 9X_php-cli при использовании одного над другим или 9X_c#-language они взаимозаменяемы?

370
0
6
Общее количество ответов: 6

Ответ #1

Ответ на вопрос: В чем разница между | и || или операторы?

Так же, как операторы & и &&, двойной оператор 9X_c-sharp является оператором «короткого замыкания».

Например:

if(condition1 || condition2 || condition3)

Если 9X_php-include условие 1 истинно, условия 2 и 3 НЕ проверяются.

if(condition1 | condition2 | condition3)

Это 9X_php-fpm проверит условия 2 и 3, даже если 1 уже 9X_php-mail верно. Поскольку ваши условия могут быть 9X_csharp довольно дорогими функциями, вы можете получить 9X_php-cli хороший прирост производительности, используя 9X_c#.net их.

Есть одно большое предостережение, NullReferences 9X_php или подобные проблемы. Например:

if(class != null && class.someVar < 20)

Если класс 9X_c#-language равен нулю, оператор if остановится после 9X_php-errors того, как class != null окажется ложным. Если вы используете 9X_php-frameworks только &, он попытается проверить class.someVar, и 9X_php-oop вы получите хороший NullReferenceException. С Or-Operator это 9X_php-mail может быть не такой большой ловушкой, поскольку 9X_php-oop маловероятно, что вы вызовете что-то плохое, но 9X_php-errors об этом следует помнить.

Никто никогда не 9X_c-sharp использует одиночные операторы & или |, если 9X_php-mail только у вас нет схемы, в которой каждое 9X_php.ini условие является функцией, которую ДОЛЖНО 9X_.cs-file выполнять. Звучит как запах дизайна, но 9X_php-oop иногда (редко) это чистый способ сделать 9X_php-fpm что-то. Оператор & «запускает эти 3 функции, и 9X_c#-language если одна из них возвращает false, выполняет 9X_php-mail блок else», в то время как | «запускает блок 9X_php-errors else только в том случае, если ни одна из 9X_visual-c# них не возвращает false» — может быть полезно, но 9X_c# как сказал, что часто это дизайнерский запах.

Существует 9X_php второе использование операторов | и &: Bitwise Operations.

563
9

  • @Gent: Правило №1 при написании программного обеспечения - сделать ваш код максимально ясным и читаемым. Если вы используете «редко используемый» синтаксис, который неправильно передает ваши намерения и сбивает с толку многих чита ...

Ответ #2

Ответ на вопрос: В чем разница между | и || или операторы?

|| является логическим оператором ИЛИ. Похоже, вы 9X_php5 в принципе знаете, что это такое. Он используется 9X_php в условных операторах, таких как if, while 9X_php-mail и т. д.

condition1 || condition2

Возвращает значение true, если истинно 9X_php-cli условие1 ИЛИ условие2.

| является побитовым 9X_php5 оператором ИЛИ. Он используется для работы 9X_c#-language с двумя числами. Вы смотрите на каждый бит 9X_php каждого числа по отдельности, и если хотя 9X_php-mail бы в одном из чисел один из битов равен 9X_visual-c# 1, то результирующий бит также будет равен 9X_c# 1. Вот несколько примеров:

A = 01010101
B = 10101010
A | B = 11111111

A = 00000001
B = 00010000
A | B = 00010001

A = 10001011
B = 00101100

A | B = 10101111

Надеюсь, это имеет 9X_phtml смысл.

Итак, отвечая на последние два вопроса, я 9X_php-cli бы не сказал, что есть какие-либо предостережения, кроме 9X_csharp «знать разницу между двумя операторами». Они 9X_csharp не взаимозаменяемы, потому что делают две 9X_php-errors совершенно разные вещи.

88
0

Ответ #3

Ответ на вопрос: В чем разница между | и || или операторы?

Один из них — «побитовое или».

10011b | 01000b 9X_c#.net => 11011b

Другой является логикой или.

правда 9X_php-mail или ложь => правда

36
1

  • `|` можно использовать с типами `bool` без короткого ...

Ответ #4

Ответ на вопрос: В чем разница между | и || или операторы?

Хороший вопрос. Эти два оператора работают 9X_php одинаково в PHP и C#.

| — побитовое ИЛИ. Он 9X_c#.net будет сравнивать два значения по их битам. Например. 1101 9X_c-sharp | 0010 = 1111. Это чрезвычайно полезно при 9X_php использовании битовых опций. Например. Чтение 9X_php-oop = 01 (0X01) Запись = 10 (0X02) Чтение-Запись 9X_php-errors = 11 (0X03). Одним из полезных примеров 9X_php-errors может быть открытие файлов. Простой пример:

File.Open(FileAccess.Read | FileAccess.Write);  //Gives read/write access to the file

|| — логическое 9X_.cs-file ИЛИ. Именно так большинство людей думают 9X_phtml об ИЛИ и сравнивают два значения на основе 9X_operators их истинности. Например. Я иду в магазин 9X_php-frameworks или я пойду в торговый центр. Это тот, который 9X_php-frameworks чаще всего используется в коде. Например:

if(Name == "Admin" || Name == "Developer") { //allow access } //checks if name equals Admin OR Name equals Developer

Ресурс 9X_operators 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

17
1

  • FWIW. Технически в C# `|` является ** логическим или ** в применении к ** логическим **. Как указано в вашей связанной ссылке. На практике конечный результат такой же, как ...

Ответ #5

Ответ на вопрос: В чем разница между | и || или операторы?

& - (Условие 1 и Условие 2): проверяет оба 9X_c# случая, даже если первый неверен

&& - (Условие 9X_php-oop 1 && Условие 2): не пытайтесь проверить 9X_php5 второй случай, если случай первый ложно

&& - оператор 9X_visual-c# заставит ваш код работать быстрее, профессиональнее 9X_php5 и редко используется

| - (Условие 1 | Условие 9X_php-errors 2): проверяет оба случая, даже если случай 9X_php.ini 1 истинен

|| - (Условие 1 || Условие 2): не 9X_phtml пытайтесь проверить второй случай, если 9X_php-oop первый одно 9X_php5 верно

|| - оператор заставит ваш код работать 9X_c#-language быстрее, профессионально | редко используется

15
2

  • Большой! Коротко и мило, я бы удалил «| редко используется» и «& редко используется», потому что, как сказал Emaborsa, это действительно ...

Ответ #6

Ответ на вопрос: В чем разница между | и || или операторы?

Простой пример на 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

9X_visual-c#

5
1

  • Зачем приводить пример java для вопроса, в котором даже не упоминается ja ...