Dado que está haciendo referencia a la función de piso 3 veces, usa un número excesivo de bucles para la mayoría de las operaciones (los números menores a 2 ^ 31 no necesitan los 31 bucles), están usando el operador ^ y no están capitalizando el hecho que ayb puedan ser números tremendamente diferentes con diferentes magnitudes, está perdiendo mucha eficiencia. La función tampoco está localizada y está haciendo dos operaciones de división más de las que necesita. Escribí esto para que sea razonablemente rápido.

En general, verá mejoras de aproximadamente 3 a 20 veces.

No hay ninguna descripción de la foto disponible.
local function BitXOR(a,b)--Bitwise xor
    local p,c=1,0
    while a>0 and b>0 do
        local ra,rb=a%2,b%2
        if ra~=rb then c=c+p end
        a,b,p=(a-ra)/2,(b-rb)/2,p*2
    end
    if a<b then a=b end
    while a>0 do
        local ra=a%2
        if ra>0 then c=c+p end
        a,p=(a-ra)/2,p*2
    end
    return c
end

«Cortocircuito» significa que el operador no necesariamente examina todas las condiciones. En los ejemplos anteriores, && examinará la segunda condición solo cuando a no sea null (de lo contrario, toda la declaración devolverá false, y sería discutible examinar las siguientes condiciones de todos modos), por lo que la declaración de a.something no generará una excepción, o Se considera «seguro».

El operador & siempre examina cada condición en la cláusula, por lo que en los ejemplos anteriores, a.something puede evaluarse cuando a es de hecho un valor null, generando una excepción.

Sé que hay muchas respuestas aquí, pero todas parecen un poco confusas. Así que después de investigar un poco en la guía de estudio de Java Oracle, se me ocurren tres escenarios diferentes de cuándo usar && o &. Los tres escenarios son lógico AND , a nivel de bit AND , y booleano AND .

AND lógico: AND lógico (también conocido como Condicional AND) utiliza el operador && . Es un significado en cortocircuito: si el operando izquierdo es falso, entonces el operando derecho no será evaluado.
Ejemplo:

En el ejemplo anterior, el valor impreso en la consola de x será 0, porque el primer operando de la instrucción if es falso, por lo tanto, Java no tiene necesidad de calcular (1 == ++ x), por lo que no se computará x.

Bitwise AND: Bitwise AND usa el operador & . Se utiliza para realizar una operación bitwise en el valor. Es mucho más fácil ver lo que está sucediendo al ver la operación en números binarios, por ejemplo:

Como puede ver en el ejemplo, cuando las representaciones binarias de los números 5 y 12 están alineadas, entonces un bit y una preformada bit a bit solo producirán un número binario donde el mismo dígito en ambos números tenga un 1. Por lo tanto, 0101 & 1100 == 0100. Lo que en decimal es 5 & 12 == 4.

Puede ser una imagen de estilo anime de texto que dice "DRACON CITY Brightest Mirror Event"

Boolean AND: Ahora el operador booleano AND se comporta de manera similar y diferente tanto a AND como a AND lógico. Me gusta pensar que es una preformación de bit a bit Y entre dos valores (o bits) booleanos, por lo tanto, utiliza el operador & . Los valores booleanos también pueden ser el resultado de una expresión lógica.


ZONA DE DESCARGA APARECERA EN!


Devuelve un valor verdadero o falso, como el AND lógico, pero a diferencia del AND lógico, no está en cortocircuito. La razón es que, para que se realice un AND a nivel de bits, debe conocer el valor de los operandos izquierdo y derecho. Aquí hay un ex:

int x = 0;
if (false & (1 == ++x) {
    System.out.println("Inside of if");
}
System.out.println(x); //"1"

Ahora, cuando se ejecuta esa instrucción if, se ejecutará la expresión (1 == ++ x), aunque el operando de la izquierda sea falso. Por lo tanto, el valor impreso para x será 1 porque se incrementó.

Esto también se aplica a OR (||), bitwise OR (|) y booleano OR (|) Espero que esto aclare cierta confusión.

5/5 - (2 votos)