c# - programação - simbolo ou no java




Qual é a diferença entre o | e || ou operadores? (9)

Eu sempre usei || (dois pipes) em expressões OR, ambos em C # e PHP. Ocasionalmente vejo um único tubo usado: | . Qual é a diferença entre esses dois usos? Há alguma ressalva ao usar uma sobre a outra ou elas são intercambiáveis?


& - (Condição 1 e Condição 2): verifica ambos os casos, mesmo que o primeiro seja falso

&& - (Condição 1 && Condição 2): não se incomoda em verificar o segundo caso se o caso um for falso

&& - operador fará seu código rodar mais rápido, profissionalmente e raramente é usado

| - (Condição 1 | Condição 2): verifica ambos os casos, mesmo se o caso 1 for verdadeiro

|| - (Condição 1 || Condição 2): não se incomoda em verificar o segundo caso se o primeiro é verdadeiro

|| - operador fará seu código rodar mais rápido, profissionalmente | raramente é usado


Assim como o operador & e && , o Operador duplo é um operador de "curto-circuito".

Por exemplo:

if(condition1 || condition2 || condition3)

Se condição1 for verdadeira, as condições 2 e 3 NÃO serão verificadas.

if(condition1 | condition2 | condition3)

Isso verificará as condições 2 e 3, mesmo se 1 já for verdadeiro. Como suas condições podem ser funções bastante caras, você pode obter um bom aumento de desempenho usando-as.

Há uma grande limitação, NullReferences ou problemas semelhantes. Por exemplo:

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

Se a classe for nula, a instrução if será interrompida após a class != null é false. Se você usa somente &, ele tentará verificar class.someVar e obterá um NullReferenceException . Com o Or-Operator, pode não ser uma grande armadilha, pois é improvável que você acione algo ruim, mas é algo para se ter em mente.

Ninguém nunca usa o single & or | operadores, a menos que você tenha um design, onde cada condição é uma função que deve ser executada. Soa como um cheiro de design, mas às vezes (raramente) é uma maneira limpa de fazer coisas. O operador & "executa estas 3 funções, e se uma delas retorna falso, execute o bloco else", enquanto o | "só executa o bloco else se nenhum retornar falso" - pode ser útil, mas como dito, muitas vezes é um cheiro de design.

Há um segundo uso do | e & operador embora: Operações Bitwise .


Boa pergunta. Esses dois operadores funcionam da mesma maneira em PHP e C #.

| é um OR bit a bit. Ele irá comparar dois valores por seus bits. Por exemplo, 1101 | 0010 = 1111. Isso é extremamente útil ao usar opções de bit. Por exemplo, Leitura = 01 (0X01) Gravação = 10 (0X02) Leitura-Gravação = 11 (0X03). Um exemplo útil seria abrir arquivos. Um exemplo simples seria:

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

|| é um OR lógico. É assim que a maioria das pessoas pensa sobre OR e compara dois valores com base em sua verdade. Por exemplo, eu estou indo para a loja ou vou ao shopping. Este é o mais usado no código. Por exemplo

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

Recurso PHP: http://us3.php.net/language.operators.bitwise

Recursos do C #: http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx

http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx


Exemplo simples em 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;
  }
}

saída:

using double pipe
x = 5
y = 0
using single pipe
x = 5
y = 5

O tubo singelo "|" é o "bit a bit" ou e só deve ser usado quando você sabe o que está fazendo. O tubo duplo "||" é um lógico ou, e pode ser usado em declarações lógicas, como "x == 0 || x == 1".

Aqui está um exemplo do que o bit a bit ou faz: se a = 0101 eb = 0011, então a | b = 0111. Se você está lidando com um sistema lógico que trata qualquer diferente de zero como verdadeiro, então o bit a bit ou irá agir da mesma maneira que o lógico ou, mas é equivalente (bit a bit e, "&") NÃO. Também o bit a bit ou não executa avaliação de curto-circuito.



Um é um "bit a bit ou".

10011b | 01000b => 11011b

O outro é uma lógica ou.

verdadeiro ou falso => ​​verdadeiro


Um único pipe (|) é o operador OR bit a bit .

Dois tubos (||) é o operador OR lógico.

Eles não são intercambiáveis.


|| (dois tubos) geralmente é lógico ou enquanto | (um tubo) é um binário ou. Fora do topo da minha cabeça, não consigo pensar em qualquer momento a diferença seria uma grande pegadinha (diferente de quando você está atribuindo o resultado para outra coisa). No entanto, tenho certeza de que alguém terá uma situação em que seja importante.

Edit: Uau, seis outras respostas no tempo que eu levei para escrever isso.





operators