Operador Pipe (|) en Java

Tengo esta statement en Java:

System.out.println(3|4); 

¿Por qué es la salida 7?

Es una operación OR bit a bit. Está modificando las cosas a nivel binario.

  011 3 in binary: | 100 in decimal: | 4 ___ ___ 111 7 

Abre Windows calc usando el modo científico. Puede pasar de decimal a binario (y hexadecimal) y realizar operaciones en modo bit que incluyen o, y, xor, etc.

Para hacer un bit a bit o en su cabeza o en papel, compare cada dígito del mismo ordinal. Si cualquiera de los números es un 1, el resultado en ese ordinal será 1.

El operador | hace un “OR a nivel de bit”. La salida de O a nivel de bit en dos bits es 1 si cualquiera de los bits es 1 o 0 si ambos bits son 0. El bit OR en dos números solo hace un OR a nivel de bit en cada bit individualmente.

Heres cómo funciona 3|4 :

  3: 00000011 4: 00000100 -------------- 3|4: 00000111 = 7 

Está haciendo una operación bitwise OR , y 3 OR 4 es 7.

Ver aquí: http://en.wikipedia.org/wiki/Bitwise_OR#OR

Representación binaria

  3 = 00000011 4 = 00000100 | is bitwise OR operator 

cuando O O dos números, toma la representación binaria y el resultado OR es 1 IFF para esa columna, al menos una columna se establece como verdadera (1)

Asi que

 00000011 00000100 -------- 00000111 

luego, las columnas le dicen el valor en esa posición:

 128, 64, 32, 16, 8, 4, 2, 1 

asi que

 128, 64, 32, 16, 8, 4, 2, 1 0 , 0, 0, 0, 0, 1, 1, 1 

cualquier columna con un 1 significa que agrega el valor de esa columna:

 4 + 2 + 1 = 7 

| es el operador “bitwise”. en a | b, si el n-ésimo bit de a y / o b es 1, el enésimo bit del resultado será 1. 3 es 11 en binario. 4 es 100 en binario.

 0 1 1 or or or 1 0 0 = = = 1 1 1 

Y resulta que es la representación binaria de 7.

Es útil darse cuenta de que hay un sistema generalizado para contar subyacente a esto. Binario es base-2. Decimal familiar es base-10. El permiso de Linux octal es base 8.

El valor de un número se obtiene sumndo los valores individuales de cada uno de sus dígitos. Para cualquier dígito, el valor se deriva de una fórmula simple.

(dígito) * (base) ^ (número de lugares a la izquierda del punto decimal)

123 = ciento veintitrés = (1 * 10 ^ 2) + (2 * 10 ^ 1) + (3 * 10 ^ 0) = 100 + 20 + 3

Aprendí eso en CS211 (no presumiendo, solo recordando)

Como los operadores bit a bit pueden ser un poco confusos sin algo para relacionarlos, la forma en que he explicado su función a los no progtwigdores es que simplemente sustituyen 1 por verdadero y 0 por falso, y luego se comportan de manera idéntica a los operadores en El idioma Ingles:

la luna es azul Y el cielo es azul, es falsa

0 y 1 es 0

la luna es azul O el cielo es azul, es verdad

0 o 1 es 1

pero la analogía se rompe cuando llego a:

el océano es azul XOR los árboles son verdes, es falso