Können Sie arithmetische Operatoren verwenden, um zwischen 0 und 1 zu wechseln?


74

Gibt es eine Möglichkeit, ohne logische und bitweise Operatoren, nur arithmetische Operatoren, zwischen ganzen Zahlen mit dem Wert 0 und 1 zu wechseln?

dh. "Variable? = Variable" macht die Variable zu einer 1, wenn sie 0 ist, oder zu einer 0, wenn sie eine Eins ist


Beachten Sie, dass in JavaScript viele der folgenden Antworten als Boolescher Wert und nicht als Zahl ausgewertet werden. Zum Beispiel: !x, (x <= 0), (x == 0)etc.
Bryan Downing

Antworten:


223
x = 1 - x

Schaltet zwischen 0 und 1 um.


2
Um dies breiter anzuwenden, können Sie, wenn xes sich in einem bestimmten Bereich positiver Zahlen befindet, dies auch verwenden, um seinen Wert umzukehren (dh 7-x= 0/7, 1/6, 2/5, 3/4).
Pluto

27

Bearbeiten: Ich habe die Frage falsch verstanden, dachte, das OP könnte anyOperator verwenden

Ein paar mehr ... (ignoriere diese)

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

Ohne Operator?

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

^ ist ein bitweiser Operator und! ist ein logischer Operator.
MAK

Während Ihre zweite Idee funktioniert, ist x = 1 - x eine viel bessere Lösung. Ein Array zu haben ist übertrieben / verschwenderisch.
Khalos

x = !xist eine gute Lösung, da sie mit Werten umgeht, die nicht Null oder Eins sind.
Mark Ingram

19

Angenommen, es wird als 0 oder 1 initialisiert:

x = 1 - x

17

Noch ein anderer Weg:

x = (x + 1) % 2

4
+1, da dies immer 0 oder 1 ergibt, auch wenn Sie versehentlich eine Ganzzahl außerhalb dieses Bereichs angeben.
Nick Forge

@NickForge Wenn Sie eine andere Eingabe als 1 oder 0 in Betracht ziehen, sind Sie sicher, dass es gut ist, dass es nicht dagegen protestiert?
Alex

1
@Alex ob das eine gute Sache ist oder nicht, hängt von der Sprache und den Erwartungen an "Defensivität" ab. In C werden Boolesche Werte beispielsweise als Ganzzahlen mit mehr als 1 Bit gespeichert, sodass das Konzept "illegal" etwas unscharf ist.
Nick Forge

1
Bingo! Ich wollte ein ganzzahliges "XOR" ausführen, und das macht genau das: x = (A + B) % 2Wenn A und B beide 0 oder 1 sind. Danke!
Noio

6

Comedy-Variation der zweiten Methode von st0le

x = "\1"[x]

heh, liebe die nicht offensichtlichen Lösungen.
Hamish

2
Und wenn Sie das mögen, werden Sie lieben x = x["\1"];(C und C ++).
Steve Jessop

5

Ein anderer Weg, um ein bisschen umzudrehen.

x = ABS(x - 1) // the absolute of (x - 1)


4

Nur für ein bisschen Abwechslung:

x = 1 / (x + 1);

x = (x == 0);

x = (x != 1);

Nicht sicher, ob Sie arithmetische Operatoren betrachten ==und !=sein sollen. Wahrscheinlich nicht, und obwohl sie in C funktionieren, würden stärker typisierte Sprachen das Ergebnis nicht in eine Ganzzahl konvertieren.


4

Sie können dies einfach versuchen

+(!0) // output:1

+(!1) // output:0

Dies ist jedoch stark sprachabhängig.
L. Dai

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.