2010-03-09 18 views
30

Qual è il modo più elegante per fare le cose prossimo:modo più elegante per cambiare 0 a 1 e viceversa

int i = oneOrZero; 

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

Si può supporre che i può avere solo 1 o 0 il valore.

+1

come si usa questo business OrZero? Vedo che fai l'asserzione dei programmatori che io sono solo 1 o 0, ma non è un compilatore forzato. Perché non usare un booleano o un enum? – Carl

+0

@Carl: perché è intero – Roman

+1

Mi permetta di chiarire: Perché stai usando un int per (1) qualcosa che ha solo due valori (che non è applicato dal tipo intero) e (2) qualcosa che ha il suo valore capovolto? – Carl

risposta

88

i ^= 1;

XOR il valore con 1. Questo vi dà in entrambe le direzioni (nel caso in cui è necessario capovolgere 0 <--> 1 in entrambi i casi):

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

Questo non è solo più breve, ma per me porta il significato un po 'meglio della risposta di sottrazione. –

+1

Funziona anche in Python – Gourneau

64

sottrazione?

i = 1 - i; 
+0

bello. Ho pensato alle operazioni binarie e non ho cercato soluzioni più semplici. – Roman

+0

Attendi ... che proviene da un matematico;) – AraK

+1

La vera domanda è, vuoi aggiungere un commento che dice "capovolgere il valore di" o lasciarlo solo? –

2

i = (i == 0)?1:0 è un modo, anche se mi piace @ Le versioni di Jimmy e di @ Yuval sono migliori.

+1

Preferisco questo come quando leggo il codice so esattamente cosa si suppone stia facendo. La sottrazione è troppo intelligente per questo, XOR non è comune a un'operazione che ho intenzione di riconoscere immediatamente. –

+0

@ Frank Schwieterman: Nella mia esperienza, il? l'operatore non è così comune. Se non hai mai visto il? operatore, non è ovvio cosa sta succedendo. Vorrei andare con lo XOR (e magari commentarlo). – GreenMatt

+0

Hmm buon punto. Dal mio punto di vista, riconoscerò? prima di ^, ma suppongo che questo non sia universale. –

2

Usa po XOR

i ^= 1;

4

i = (i + 1) % 2, anche se penso che siamo tutti d'accordo il metodo di sottrazione o XOR è meglio! (Anche se ha il vantaggio di "capovolgere l'interruttore" per qualcosa di più che binario.)

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