Die Herausforderung: Definieren Sie x
so, dass der Ausdruck (x == x+2)
als wahr bewertet wird.
Ich habe die Frage mit C markiert, aber Antworten in anderen Sprachen sind willkommen, sofern sie kreativ sind oder einen interessanten Aspekt der Sprache hervorheben.
Ich beabsichtige, eine C-Lösung zu akzeptieren, aber andere Sprachen können meine Stimme bekommen.
- Richtig - Funktioniert bei standardkonformen Implementierungen. Ausnahme - vorausgesetzt, eine Implementierung der
int
Basistypen ist in Ordnung , wenn es sich um eine allgemeine Implementierung handelt (z. B. vorausgesetzt, es handelt sich um das 32-Bit-2-Komplement). - Einfach - sollte klein sein, grundlegende Sprachfunktionen verwenden.
- Interessant - es ist subjektiv, gebe ich zu. Ich habe einige Beispiele für das, was ich für interessant halte, aber ich möchte keine Hinweise geben. Update : Das Vermeiden des Präprozessors ist interessant.
- Schnell - Die erste gute Antwort wird akzeptiert.
Nach 60 Antworten (mit einer solchen Erwartung hätte ich nie gerechnet) kann es gut sein, sie zusammenzufassen.
Die 60 Antworten sind in 7 Gruppen unterteilt, von denen 3 in C implementiert werden können, der Rest in anderen Sprachen:
- Der C-Präprozessor.
#define x 2|0
wurde vorgeschlagen, aber es gibt viele andere Möglichkeiten. - Gleitkomma. Große Zahlen, Unendlich
oder NaNfunktionieren. Zeigerarithmetik. Ein Zeiger auf eine riesige Struktur bewirkt, dass 2 hinzugefügt wird.
Der Rest funktioniert nicht mit C:
- Überladen von Operatoren - Ein
+
, das nicht hinzugefügt wird, oder ein==
, das immer true zurückgibt. - Macht
x
einen Funktionsaufruf ( in einigen Sprachen erlauben es , ohne diex()
Syntax). Dann kann es jedes Mal etwas anderes zurückgeben. - Ein Ein-Bit-Datentyp. Dann
x == x+2 (mod 2)
. - Ändern
2
- in einigen Sprachen können Sie es zuweisen0
.
add to Set
die Standardbibliothek, ohne sich neu zu definieren +
, nicht in diese 7 Kategorien passt, IMHO.
4. Quick
? Sie meinen "Wer kennt einen und hat das Glück, diese Frage zuerst zu lesen"?