2010-11-03 12 views
35

Czy istnieje sposób bez użycia operatorów logicznych i bitowych, tylko operatory arytmetyczne, aby przełączać między liczbami całkowitymi o wartości 0 i 1?Czy można używać operatorów arytmetycznych do przechwytywania między 0 a 1

tj. "zmienna = zmienna" uczyni zmienną 1 czy 0 lub 0, jeśli jest to jeden

+0

Należy zauważyć, że w JavaScript wiele z poniższych odpowiedzi jest wartością boolowską, a nie liczbą. Na przykład: '! X',' (x <= 0) ',' (x == 0) ', itp. –

Odpowiedz

123
x = 1 - x 

będzie przełączać pomiędzy 0 a 1.

+0

Aby zastosować to szerzej, jeśli' x' znajduje się w określonym zakresie liczb dodatnich, to może również użyć tego do odwrócenia jego wartości (tj. '7-x' = 0/7, 1/6, 2/5, 3/4). – Pluto

16

Zakładając, że jest inicjowany jako 0 lub 1:

x = 1 - x 
4

Tylko na trochę odmiany:

x = 1/(x + 1); 

x = (x == 0); 

x = (x != 1); 

Nie jesteś pewien, czy uważasz == i != za operatory arytmetyczne. Prawdopodobnie nie, i oczywiście chociaż pracują w C, silniej napisane języki nie zamieniłyby wyniku na liczbę całkowitą.

20

Edit: I misread pytanie, myślałem że PO może wykorzystać any operatora

A Few więcej ... (zignorować)

x ^= 1  // bitwise operator 
x = !x  // logical operator 
x = (x <= 0) // kinda the same as x != 1 

bez korzystania z operatorem?

int arr[] = {1,0} 
x = arr[x] 
+0

^jest operatorem bitowym i! jest operatorem logicznym. – MAK

+2

+1 dla drugiej metody –

+0

@MAK, błędnie przeczytałem pytanie :('edytowane' – st0le

12

Jeszcze innym sposobem: zmienność

x = (x + 1) % 2 
+3

+1, ponieważ zawsze da ci 0 lub 1, nawet jeśli przypadkowo dasz liczbę całkowitą poza tym zakresem. –

+0

@NickForge Cosidowanie tego wejścia inne że 1 lub 0 jest niezgodne z prawem w zakresie tego pytania, czy jesteś pewien, że dobrze, że nie zaprotestuje na nim? – Alex

+1

@Alex, czy to dobrze, zależy od języka i oczekiwań "defensywności". C na przykład, booleans są przechowywane jako liczby całkowite z więcej niż 1 bit, więc pojęcie "nielegalne" jest nieco rozmyte –

3

Komedia na drugim sposobie st0le za

x = "\1"[x] 
+0

heh, kocham nieoczywiste rozwiązania. – Hamish

+1

A jeśli Ci się spodoba, pokochasz 'x = x [" \ 1 "];' (C i C++). –

1

można po prostu spróbować tego

+(!0) // output:1 

+(!1) // output:0 
2

Innym sposobem, aby przerzucić trochę.

x = ABS(x - 1) // the absolute of (x - 1) 
Powiązane problemy