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.
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.
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
Questo non è solo più breve, ma per me porta il significato un po 'meglio della risposta di sottrazione. –
Funziona anche in Python – Gourneau
i = (i == 0)?1:0
è un modo, anche se mi piace @ Le versioni di Jimmy e di @ Yuval sono migliori.
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. –
@ 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
Hmm buon punto. Dal mio punto di vista, riconoscerò? prima di ^, ma suppongo che questo non sia universale. –
Usa po XOR
i ^= 1;
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.)
int x = 0;
x=(int)Math.cos(x);
System.out.println("X value "+x);
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
@Carl: perché è intero – Roman
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