2011-08-17 18 views
5

Cuando se le presentan dos argumentos booleanos, el operador^realiza una acción exclusiva o, p.operador groovy^

true^true == false 
true^false == true 
false^true == true 
false^false == false 

Cuando se le presentan dos argumentos numéricos, hace algo, pero no tengo idea de qué. Al principio pensé que era debido división modular

(5^5) == 0 

Sin embargo

(10^4) == 14 

Así que no es división modular, que es una especie de desplazamiento de bit?

+0

Es bit a bit exclusivo o, al igual que Java http://stackoverflow.com/questions/460542/operator-in-java –

Respuesta

12

^ hace lo mismo como lo hace en Java y otros lenguajes:

Es un bit a bit OR exclusiva (abreviado: XOR bit a bit)

Esto significa que para cada bit en la representación binaria de la dos números, el bit resultante en la salida será bit_in_first_value^bit_in_second_value.

+1

hecho, que yo sepa, todos langauges fuertemente derivados de C tienen este comportamiento prescrito de su Operadores XOR. P.EJ. 'perl -le 'print (10^4)' 'imprime 14. Groovy y Perl ocupan un ambiente ecológico agradable, tanto es así que [la versión de Groovy] (http://pleac.sourceforge.net/pleac_groovy/index.html) fue el primero de docenas de idiomas cuya traducción del * Perl Cookbook * está completa en el repositorio [PLEAC - Programa de Lenguaje de Programación Receta Similar] (http://pleac.sourceforge.net/) en Sourceforge. OCaml fue el segundo. Python está en 85% y Ruby en solo 65%. Groovy es fácil y divertido. – tchrist