В качестве отладчика / тестовой программы для моей реализации brainf * ck я создал следующий цикл подсчета:
+[[>+]+]
С однобайтовыми ячейками с переносом и с 30 КБ ячеек с циклическим переносом это создает бесконечный цикл подсчета. Он устанавливает каждую ячейку в 1, затем каждую ячейку в 2 и т. Д.
Моя проблема в том, что когда он достигает 255, внутренний цикл увеличивает ячейку до 0, а затем внешний цикл немедленно увеличивает ее до 1. При переполнении это действует как «двойной шаг» вместо одиночного шага. Это единственный способ заставить цикл продолжаться бесконечно с помощью этой сжатой программы.
Счетчик для каждой ячейки идет 0 -> 1 -> 2 ... 254 -> 255 -> 1 ...
Пока хотелось бы пойти 0 -> 1 -> 2 ... 254 -> 255 -> 0 -> 1 ...
Просто трудно продолжить цикл, когда текущая ячейка равна нулю. Я играл с вариациями на одну и ту же тему, но ни один из них не понял это правильно.
Эта конкретная программа - просто тривиальная программа подсчета для тестирования, но что действительно поможет мне в будущих программах, так это знание того, как инвертировать условное выражение цикла, как мне нужно, чтобы этот цикл подсчета работал.