OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 09:19

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Приоритет унарного минуса
СообщениеДобавлено: Четверг, 18 Август, 2016 00:35 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 518
Откуда: Украина, Днепропетровская обл.
Вопрос от Олега Комлева:
Oleg Komlev писал(а):
Почему унарный минус в Обероне/КП имеет приоритет как у аддитивной операции? Получается, что (-1 MOD 256) означает "-(1 MOD 256)" , а не "(-1) MOD 256". Кроме того, "-1" это не литерал "минус единица", а константное выражение "изменение знака у литерала 1", в результате вычисления которого получается константа "минус 1". Если бы унарный минус имел наивысший приоритет, то не было бы практической разницы для записи "-1" (и литерал и константное выражение означало бы "минус единица"). Но если приоритет унарного минуса ниже мультипликативных операций, то разница есть: (-1 MOD 256) = -1, а выражение "(-1) MOD 256" дает 255.

В Паскале, Си, Бейсике (по крайней мере, в большинстве диалектов) и многих других языках унарный минус имеет наивысший приоритет (во всяком случае, выше мультипликативных операций). Почему же в Обероне не так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Приоритет унарного минуса
СообщениеДобавлено: Четверг, 18 Август, 2016 11:00 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1134
Откуда: СССР v2.0 rc 1
Хороший вопрос. Не знал, что дела обстоят именно так. Дурная привычка писать (-1) MOD 255 меня в программе дорасчёта спасла, сам того не зная))
А вообще, этот момент, конечно, вызывает вопросы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Приоритет унарного минуса
СообщениеДобавлено: Четверг, 18 Август, 2016 19:24 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
В оберонах вообще приоритет операторов странный. Вирт, насколько я помню, при выборе приоритетов опирался больше на математическую традицию, чем на практику программирования.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Приоритет унарного минуса
СообщениеДобавлено: Пятница, 28 Октябрь, 2016 08:31 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Интересно, вы действительно хотите, чтобы (-E) и (0 - E) иногда выдавали разные результаты?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Приоритет унарного минуса
СообщениеДобавлено: Суббота, 29 Октябрь, 2016 14:15 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 518
Откуда: Украина, Днепропетровская обл.
И в каком же случае будут разные результаты?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Приоритет унарного минуса
СообщениеДобавлено: Воскресенье, 06 Ноябрь, 2016 19:15 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
Вы в вопросе написали такое выражение.
(-1) MOD 256 по правилам арифметики, согласно которым остаток неотрицательный, равен 255.
0 - (1 MOD 256) равен -1
Можете проверить хоть в ББ, хоть в python, хоть в Lua, но только в Обероне -1 MOD 256 = 0 - 1 MOD 256 (не проверял)
Одна из проблем Оберона в нашем чудном мире, что он ведёт себя более логично, чем другие языки, и потому представляется менее предсказуемым для людей, привыкшим к более нелогичному поведению.

Кстати, из побочных преимуществ - упрощается создание синтаксического дерева.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Приоритет унарного минуса
СообщениеДобавлено: Понедельник, 07 Ноябрь, 2016 08:45 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
Cтрого говоря, -1 и 255 в двоичном виде одно и то же. Если нужно учитывать знак, то спасёт приведение типов:
В Активном Обероне, например:
SIGNED8( (-1) MOD 256) = SIGNED8( -1 MOD 256 ) = -1

К тому же, как мне помнится, Excel тоже трактует остаток как положительное число, а VBA - как отрицательное.
То есть в Экселе MOD( -1, 256 ) = 255


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Приоритет унарного минуса
СообщениеДобавлено: Понедельник, 07 Ноябрь, 2016 09:42 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
В чем разница между получением остатка от деления и взятия модуля?
В Обероне MOD, что как бы намекает, да.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Приоритет унарного минуса
СообщениеДобавлено: Среда, 16 Ноябрь, 2016 04:29 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Comdiv писал(а):
Кстати, из побочных преимуществ - упрощается создание синтаксического дерева.
В Обероне нет унарных операций "+"/"-". Это упрощает и грамматику, и таблицу операций.

"Свободы", правда, несколько прижимаются. Трассером не постреляешь.
Код:
#include <stdio.h>
int main ()
{
int x = 1, y = 2;
printf("%i", - - - - -x + - - - - -y);
return 0;
}
Разве это не стоит 16-ти уровней приоритетов? :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB