2010-07-08 8 views
6

¿Cómo maneja Java los argumentos separados por | ?¿Cómo maneja Java los argumentos separados por |?

por ejemplo

private void foo(int i) { 
    System.out.println(i); 
} 

private void bar() { 
    foo(1 | 2 | 1); 
} 

que daría a la salida

3 

que he visto este utilizado en los constructores de widgets SWT/JFace. Lo que no puedo entender es cómo se decide el valor de i.

+1

Usted sabe que | no es un separador, es el operador O bit a bit – Goibniu

+1

Nunca me encontré con operadores bit a bit en Java, probablemente por eso no me di cuenta, tiene mucho más sentido ahora. – Ozsie

Respuesta

8

El | es un operador bit a bit.

foo(1 | 2 | 1); 

significa foo llamada con el argumento de 1 bit a bit-o 2 bit a bit o 1.

  • 1 en binario es 01
  • 2 en binario es 10

OR bit a bit de 01 y 10 es 11 que es 3 en decimal.

Tenga en cuenta que el operador | se puede utilizar también para booleanos. La diferencia del operador || es que el segundo operando se evalúa incluso si el primer operando evalúa a true.

En realidad, todos los operadores de bit a bit también funcionan en booleanos, incluido el xor ^. Aquí, sin embargo, no hay un operador lógico correspondiente. (Sería redundante, ya que no hay forma de hacer una evaluación "vaga" de ^ :)

+1

+1 para "segundo operando se evalúa incluso si el primer operando se evalúa como verdadero", no lo sabía. – f1sh

2

está utilizando el bitwise OR operator. Para principiantes, 1 | 1 = 1, por lo que el segundo 1 es redundante. Si eliminamos el 1 redundante, nos queda la ecuación 1 | 2 = 3. Mirando en 2 bit binario que parece:

01 | 10 = 11

el operador OR coincidirá los bits correspondientes de cada uno o los valores y si hay un 1 en cualquiera o ambos valores para una posición dada, el resultado es un 1. Si ambos valores para ambos bits correspondientes, el resultado es 0.

Cuestiones relacionadas