Задача: определить x
таким образом, чтобы выражение (x == x+2)
оценивалось как истинное.
Я пометил вопрос буквой C, но ответы на других языках приветствуются, если они творческие или выделяют интересный аспект языка.
Я намерен принять решение C, но другие языки могут получить мой голос.
- Правильно - работает на стандартных реализациях. Исключение - при условии реализации основных типов, если это обычная реализация (например, при условии, что
int
это 32-битное дополнение 2), это нормально. - Просто - должно быть мало, использовать основные языковые функции.
- Интересно - это субъективно, я признаю. У меня есть несколько примеров того, что я считаю интересным, но я не хочу давать подсказки. Обновление : избегать препроцессора интересно.
- Быстрый - Первый хороший ответ будет принят.
После получения 60 ответов (я никогда не ожидал такого упоминания), возможно, было бы неплохо суммировать их.
60 ответов делятся на 7 групп, 3 из которых могут быть реализованы на C, остальные на других языках:
- Препроцессор C
#define x 2|0
было предложено, но есть много других возможностей. - Плавающая точка. Большие числа, бесконечность
или NaNвсе работают. Указатель арифметики. Указатель на огромную структуру приводит к добавлению 2 для переноса.
Остальные не работают с C:
- Перегрузка оператора - A
+
, который не добавляет, или a,==
который всегда возвращает true. - Выполнение
x
вызова функции (некоторые языки допускают это безx()
синтаксиса). Тогда он может возвращать что-то еще каждый раз. - Однобитный тип данных. Тогда
x == x+2 (mod 2)
. - Изменение
2
- какой-то язык позволяет вам назначить0
его.
add to Set
стандартную библиотеку, не переопределяя +
себя, не вписывается в эти 7 категорий, ИМХО.
4. Quick
? Ты имеешь в виду: «Кто знает, и кому посчастливилось прочитать этот вопрос первым»?