2012-02-08 12 views
7

Pregunta de Java absolutamente básica que estoy teniendo dificultades para encontrar en Google. ¿Qué hace el siguiente medio:Notación para lógica en Java

(7 & 8) == 0? 

¿Eso es equivalente a la escritura:

7 == 0 || 8 == 0? 

escribí una rápida principal que prueba esto, y parece ser el caso. Solo quería asegurarme de no perderme nada.

Respuesta

17

No. & es bitwise and. Se establece un poco si los bits correspondientes se establecen en ambas entradas. Dado que en binario, 7 es 111 y 8 es 1000, no tienen bits en común, por lo que el resultado es 0.

No existe realmente ninguna sintaxis abreviada para lo que sugiere, no en una sola línea. Hay algunas soluciones: pruebe la membresía en Set o BitSet, use una declaración switch, pero nada tan eficiente como tan solo 7 == 0 || 8 == 0.

3

Es una comparación de bits, funciona bien porque está comparando con 7 y 8, no está garantizado con otros casos. Si ambos bits en los enteros coinciden obtendrás resultados como '1' y no '0'.

4

El & es un operador Y bit-wise. Esto significa que son AND de los bits que representan 8 y 7:

7 ->0111

8 ->1000

Lo que obviamente da lugar a 0.

este wikipedia article lo explica bien con su ejemplo exacto junto con la explicación de los otros operadores bit-wise.

10

& es a nivel de bits Y. Dados dos bits para entradas, el siguiente da la salida de bit por bit a bit Y:

0 & 0 = 0 
0 & 1 = 0 
1 & 0 = 0 
1 & 1 = 1 

En este caso,

7 in binary is 00000111 
8 in binary is 00001000 
       -------- 
       00000000, which is 0 in decimal. 

Supongamos que tenía 26 en lugar de 8.

7 in binary is 00000111 
26 in binary is 00011010 
       -------- 
       00000010, which is 2 in decimal. 

bit a bit las operaciones se usan para extraer y manipular campos empaquetados en un número.

Por ejemplo, supongamos que tiene 3 campos agrupados en un número, dos de 4 bits cada uno (0..15), uno y 3 bits (0..7).

// n = aaaabbbbccc 

// Unpack the fields: 
a = (n >> 7) & 0xF; 
b = (n >> 3) & 0xF; 
c = (n >> 0) & 0x7; 

// Pack the fields: 
n = (a << 7) 
    | (b << 3) 
    | (c << 0); 
3

& es una comparación bit, como se ha mencionado, pero también puede servir como un cortocircuito "y". Por ejemplo:

if((x == 3) && (y = 3/0)){ 

arrojará un error todo el tiempo.Sin embargo,

if((x == 3) & (y = 3/0)){ 

sólo se generará un error si x es igual a 3. Si x no es igual a 3, java no se molestará evaluar el resto de las expresiones porque Falso & nada será falsa.

Cuestiones relacionadas