2010-03-09 12 views
30

Jaki jest najbardziej elegancki sposób to zrobić następnego rzeczy:najbardziej elegancki sposób zmienić 0 na 1 i odwrotnie

int i = oneOrZero; 

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

Można założyć, że i może mieć tylko wartość 1 lub 0.

+1

do czego służy ta firma OneOrZero? Widzę, że zgadzasz się z programistami, że mam tylko 1 lub 0, ale nie jest to wymuszone przez kompilator. Dlaczego nie używać wartości boolowskiej lub wyliczenia? – Carl

+0

@Carl: ponieważ jest liczbą całkowitą – Roman

+1

Pozwól mi wyjaśnić: Dlaczego używasz int dla (1) coś, co ma tylko dwie wartości (które nie jest wymuszane przez typ integer) i (2) coś, co ma odwróconą wartość? – Carl

Odpowiedz

88

i ^= 1;

XOR wartość o 1. Daje to w obie strony (w przypadku trzeba odwrócić 0 <--> 1 obu kierunkach):

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

Jest to nie tylko krótszy, ale dla mnie ma znaczenie nieco lepsze niż odpowiedź odejmowania. –

+1

To działa również w Pythonie – Gourneau

64

odejmowanie?

i = 1 - i; 
+0

ładny. Myślałem o operacjach binarnych i nie szukałem bardziej prostych rozwiązań. – Roman

+0

Czekaj ... pochodzi od matematyka;) – AraK

+1

Prawdziwe pytanie brzmi: czy dodasz komentarz z informacją "przerzuć wartość i" lub po prostu zostaw to w spokoju? –

2

i = (i == 0)?1:0 jest jednym ze sposobów, choć lubię Wersje @ Jimmy'ego i @ Yuval są lepsze.

+1

Wolę ten, ponieważ kiedy czytam kod, wiem dokładnie, co powinien robić. Odejmowanie jest zbyt mądre, XOR nie jest typowe dla operacji, którą zamierzam natychmiast rozpoznać. –

+0

@Frank Schwieterman: Z mojego doświadczenia wynika, że? operator nie jest tak powszechny. Jeśli nigdy nie widziałeś? operatora, nie jest oczywiste, co się dzieje. Pójdę z XOR (i może to skomentuję). – GreenMatt

+0

Hmm, dobry punkt. Z mojej perspektywy poznam? przed ^, ale przypuszczam, że nie jest to powszechne. –

2

Zastosowanie bit xor

i ^= 1;

4

i = (i + 1) % 2, choć myślę, że wszyscy zgadzają metoda odejmowania lub xor jest lepiej! (Chociaż ma dodatkową zaletę "przełączania przełącznika" na więcej niż binarne.)

1
int x = 0; 
x=(int)Math.cos(x); 
System.out.println("X value "+x); 
Powiązane problemy