Пока что тут не прозвучало слов в защиту или опровержение операций сдвига в противоположную сторону при заданном отрицательном количестве бит.

Скажите навскидку: ORD({31}) < 0 или нет? Оно всегда и везде < 0 или в специфическом окружении так может и не быть? Где в описании языка про это есть? Другими словами, всегда ли при программировании на Обероне-07 нам следует ассоциировать 31-й бит как знаковый? Когда к целым числам применяется официально не системная, но одобренная и предсказуемая операция ROR, об этом следует твёрдо знать.

> -- Илья Ермаков писал(а):
> ORD как порядковый номер часто полезен для какого-то уникального целого отпечатка другой сущности.Ну если так, то да, смысл есть. Но такую возможность нужно ещё протащить в стандарт языка, обосновать, хорошо описать в документации, а только потом реализовывать. А пока обойдёмся SYSTEM.ADR, который без SYSTEM.PUT не опаснее ORD.

> -- Kemet писал(а):
> Поэтому Вирт посчитал, что наличие двух разных операторов, выполняющих одно и тоже, совершенно излишняя сложность.Да даже наличие операции ASR — излишняя сложность, потому что то же самое делает DIV, о чём ранее писал Пётр:
> -- Пётр Кушнир писал(а):
> Вирт это дело очень любит, умножил/поделил на 01000H вот и сдвинул туда/сюда.
> -- Kemet писал(а):
> Беззнаковых типов у Вирта нет, поэтому наличие логического сдвига вправо - лишняя сущностьА вот в логическом сдвиге вправо смысла было бы намного больше, чем в арифметическом (который и без ASR легко сделать с помощью DIV). А так приходится его эмулировать при помощи арифметического сдвига — проверять и сбрасывать знак, и потом только сдвигать.

> -- Kemet писал(а):
> Я же говорю - это узко заточенный язык, под конкретное применение. По сюжету он не нужен.Да я постоянно спорю об этом с Оберонцами-07, но они очень упёртые и этого не признают. Расширяют потихоньку для себя, куда считают нужным.

> -- Kemet писал(а):
> А разве есть операция сдвига множества?В Обероне, насколько я понимаю, на тип SET положена роль работы с битами, а раз так, то смысл в сдвигах битов есть. Просто в отдельную операцию его не выделили, обходятся такой конструкцией:
## Код:
```
set := SYSTEM.VAL(SET, ROR(ORD(set), n));
```
