Парни, ВЫ чего!!!
Counter - это солидное число, а вовсе не обрубок из двух битов. У него есть union-поле i типа INTEGER. На 8-битном контроллере я байты конечно экономлю, но все равно - 24 бита.
Получается надо гораздо сложнее, чем в простых приведенных вариантах.
Функционально правильно сделанно у Алексея, но ведь логические операции-то ленивые!!! Это не просто УЖОС, это УЖОС в квадрате
Ну и безусловно правильно сказал Евгений:
i = (i & ~1) | ((i & 1) ^ ((i & 2) >> 1)) - именно так они (ЯВУ) собаки и делают...
(
btw: на PC это 3 команды: bt [Counter],1; setc al; xor byte[Counter],al - но увидеть тот компилятор, который так сделает - несбыточная мечта)
Но это другая песня. Хотя
функциональность нужна именно такая - ни шага в сторону.
Коллеги, я дико извиняюсь конечно же, что специально не заострил внимание на многобитности Counter-а... В моей-то голове - все настолько очевидным казалось
Как бы я поясню план наших размышлений (мне именно такой представляется правильным)
1) Не будем говорить о том кто чего поощряет, и что является извращением, а что нет. Такой трюк с битами есть внешняя данность. И те кто это придумывал - вовсе не дураки, не смотря на то, что не посоветовались с Федором Васильевичем. В общем, предложение: холивары - где нибудь в другой теме, про приматологию.
(
btw: В электронике одновременное изменение нескольких сигналов называется гонками. А даже не существует теорий синтеза электронных схем без гонок, если одновременно меняются несколько входных сигналов. Если один - то без вопросов. Вот потому "так не математически" и устроена входная последовательность сигналов)
2) Напишем таки
функционально правильный код на Обероне. Ей-ей не просто
3) Вспомним, что код в первую очередь пишется для Человека
4) И, обогащенные разными вариантами кодов, поразмышляем над предложением Алексея:
имеет ли смысл подобный расширизм для оберона?Если короче: перед тем как давать шаблонный ответ - давайте подумаем. Слепить шаблонный ответ - много ума не надо. Тем более, что слышали сто раз.