OberonCore https://forum.oberoncore.ru/ |
|
Приоритет унарного минуса https://forum.oberoncore.ru/viewtopic.php?f=29&t=5870 |
Страница 1 из 1 |
Автор: | Oleg N. Cher [ Четверг, 18 Август, 2016 00:35 ] |
Заголовок сообщения: | Приоритет унарного минуса |
Вопрос от Олега Комлева: Oleg Komlev писал(а): Почему унарный минус в Обероне/КП имеет приоритет как у аддитивной операции? Получается, что (-1 MOD 256) означает "-(1 MOD 256)" , а не "(-1) MOD 256". Кроме того, "-1" это не литерал "минус единица", а константное выражение "изменение знака у литерала 1", в результате вычисления которого получается константа "минус 1". Если бы унарный минус имел наивысший приоритет, то не было бы практической разницы для записи "-1" (и литерал и константное выражение означало бы "минус единица"). Но если приоритет унарного минуса ниже мультипликативных операций, то разница есть: (-1 MOD 256) = -1, а выражение "(-1) MOD 256" дает 255.
В Паскале, Си, Бейсике (по крайней мере, в большинстве диалектов) и многих других языках унарный минус имеет наивысший приоритет (во всяком случае, выше мультипликативных операций). Почему же в Обероне не так? |
Автор: | prospero78 [ Четверг, 18 Август, 2016 11:00 ] |
Заголовок сообщения: | Re: Приоритет унарного минуса |
Хороший вопрос. Не знал, что дела обстоят именно так. Дурная привычка писать (-1) MOD 255 меня в программе дорасчёта спасла, сам того не зная)) А вообще, этот момент, конечно, вызывает вопросы. |
Автор: | ilovb [ Четверг, 18 Август, 2016 19:24 ] |
Заголовок сообщения: | Re: Приоритет унарного минуса |
В оберонах вообще приоритет операторов странный. Вирт, насколько я помню, при выборе приоритетов опирался больше на математическую традицию, чем на практику программирования. |
Автор: | Trurl [ Пятница, 28 Октябрь, 2016 08:31 ] |
Заголовок сообщения: | Re: Приоритет унарного минуса |
Интересно, вы действительно хотите, чтобы (-E) и (0 - E) иногда выдавали разные результаты? |
Автор: | Oleg N. Cher [ Суббота, 29 Октябрь, 2016 14:15 ] |
Заголовок сообщения: | Re: Приоритет унарного минуса |
И в каком же случае будут разные результаты? |
Автор: | Comdiv [ Воскресенье, 06 Ноябрь, 2016 19:15 ] |
Заголовок сообщения: | Re: Приоритет унарного минуса |
Вы в вопросе написали такое выражение. (-1) MOD 256 по правилам арифметики, согласно которым остаток неотрицательный, равен 255. 0 - (1 MOD 256) равен -1 Можете проверить хоть в ББ, хоть в python, хоть в Lua, но только в Обероне -1 MOD 256 = 0 - 1 MOD 256 (не проверял) Одна из проблем Оберона в нашем чудном мире, что он ведёт себя более логично, чем другие языки, и потому представляется менее предсказуемым для людей, привыкшим к более нелогичному поведению. Кстати, из побочных преимуществ - упрощается создание синтаксического дерева. |
Автор: | Kemet [ Понедельник, 07 Ноябрь, 2016 08:45 ] |
Заголовок сообщения: | Re: Приоритет унарного минуса |
Cтрого говоря, -1 и 255 в двоичном виде одно и то же. Если нужно учитывать знак, то спасёт приведение типов: В Активном Обероне, например: SIGNED8( (-1) MOD 256) = SIGNED8( -1 MOD 256 ) = -1 К тому же, как мне помнится, Excel тоже трактует остаток как положительное число, а VBA - как отрицательное. То есть в Экселе MOD( -1, 256 ) = 255 |
Автор: | Kemet [ Понедельник, 07 Ноябрь, 2016 09:42 ] |
Заголовок сообщения: | Re: Приоритет унарного минуса |
В чем разница между получением остатка от деления и взятия модуля? В Обероне MOD, что как бы намекает, да. |
Автор: | Евгений Темиргалеев [ Среда, 16 Ноябрь, 2016 04:29 ] |
Заголовок сообщения: | Re: Приоритет унарного минуса |
Comdiv писал(а): Кстати, из побочных преимуществ - упрощается создание синтаксического дерева. В Обероне нет унарных операций "+"/"-". Это упрощает и грамматику, и таблицу операций."Свободы", правда, несколько прижимаются. Трассером не постреляешь. Код: #include <stdio.h> Разве это не стоит 16-ти уровней приоритетов?
int main () { int x = 1, y = 2; printf("%i", - - - - -x + - - - - -y); return 0; } |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |