El desafío: definir x
de tal manera que la expresión (x == x+2)
se evalúe como verdadera.
Etiqueté la pregunta con C, pero las respuestas en otros idiomas son bienvenidas, siempre que sean creativas o resalten un aspecto interesante del lenguaje.
Tengo la intención de aceptar una solución C, pero otros idiomas pueden obtener mi voto.
- Correcto: funciona en implementaciones que cumplen con los estándares. Excepción: asumir una implementación de los tipos básicos, si es una implementación común (por ejemplo, suponiendo que
int
es un complemento de 32 bits 2) está bien. - Simple: debe ser pequeño, usar funciones básicas del lenguaje.
- Interesante, es subjetivo, lo admito. Tengo algunos ejemplos de lo que considero interesante, pero no quiero dar pistas. Actualización : Evitar el preprocesador es interesante.
- Rápido: se aceptará la primera buena respuesta.
Después de obtener 60 respuestas (nunca esperé tal anticipación), puede ser bueno resumirlas.
Las 60 respuestas se dividen en 7 grupos, 3 de los cuales se pueden implementar en C, el resto en otros idiomas:
- El preprocesador C.
#define x 2|0
fue sugerido, pero hay muchas otras posibilidades. - Punto flotante. Grandes números, infinito
o NaN,todo funciona. Puntero aritmético. Un puntero a una estructura enorme hace que se agregue 2 para ajustarse.
El resto no funciona con C:
- Sobrecarga del operador: una
+
que no agrega o una==
que siempre devuelve verdadero. - Realizar
x
una llamada de función (algunos idiomas lo permiten sin lax()
sintaxis). Entonces puede devolver algo más cada vez. - Un tipo de datos de un bit. Entonces
x == x+2 (mod 2)
. - Cambio
2
: algunos idiomas le permiten asignarlo0
.
add to Set
por la biblioteca estándar, sin redefinirse +
, no encaja en estas 7 categorías, en mi humilde opinión.
4. Quick
? ¿Quiere decir "Quien conoce uno y tiene la suerte de leer esta pregunta primero"?