2010-03-09 8 views
30

¿Cuál es la forma más elegante de hacer el siguiente material:forma más elegante para cambiar de 0 a 1 y viceversa

int i = oneOrZero; 

if (i == 0) { 
    i = 1; 
} else { 
    i = 0; 
} 

Se puede suponer que i sólo puede tener valor 1 o 0.

+1

¿Qué es esto que se está usando en los negocios de OrZero? Veo que haces que los programadores afirmen que solo tengo 1 o 0, pero eso no se aplica al compilador. ¿Por qué no usar un booleano o una enumeración? – Carl

+0

@Carl: porque es un número entero – Roman

+1

Permítanme aclarar: ¿Por qué está usando un int para (1) algo que solo tiene dos valores (que no se aplica por el tipo entero) y (2) algo que tiene su valor volteado? – Carl

Respuesta

88

i ^= 1;

XOR con el valor 1. Esto le da en ambos sentidos (en caso de tener que dar la vuelta 0 <--> 1 en ambos sentidos):

0^1 = 1 
1^1 = 0 
+2

Esto no solo es más corto, pero para mí tiene un significado un poco mejor que la respuesta de resta. –

+1

Esto también funciona en Python – Gourneau

64

resta?

i = 1 - i; 
+0

agradable. Pensé en las operaciones binarias y no busqué soluciones más simples. – Roman

+0

Espera ... que viene de un matemático;) – AraK

+1

La verdadera pregunta es, ¿podrías agregar un comentario que diga "cambiar el valor de i" o simplemente dejarlo en blanco? –

2

i = (i == 0)?1:0 es una manera, aunque me gusta Las versiones de @Jimmy y @ Yuval son mejores.

+1

Prefiero este, ya que cuando leo el código, sé exactamente lo que se supone que debe hacer. La resta es demasiado inteligente para eso, XOR no es común en una operación que voy a reconocer de inmediato. –

+0

@Frank Schwieterman: En mi experiencia, el? el operador tampoco es tan común. Si nunca has visto el? operador, no es obvio lo que está sucediendo. Me gustaría ir con el XOR (y tal vez comentarlo). – GreenMatt

+0

Hmm buen punto. Desde mi punto de vista voy a reconocer? antes ^, pero supongo que eso no es universal. –

2

Uso bits XOR

i ^= 1;

4

i = (i + 1) % 2, aunque creo que todos estamos de acuerdo al método de sustracción o XOR es mejor! (Aunque tiene la ventaja añadida de "cambiar el interruptor" por más que el binario.)

1
int x = 0; 
x=(int)Math.cos(x); 
System.out.println("X value "+x); 
Cuestiones relacionadas