OberonCore
https://forum.oberoncore.ru/

Как работает явное преобразование целочисленных типов?
https://forum.oberoncore.ru/viewtopic.php?f=22&t=6605
Страница 1 из 1

Автор:  budden [ Воскресенье, 26 Апрель, 2020 00:34 ]
Заголовок сообщения:  Как работает явное преобразование целочисленных типов?

Я запутался. Пытаюсь найти в существущем PDF (который WIP), но там нашлось только:
Цитата:
A type guard on numbers has been introduced. A guarded number is converted to the
given type if and only if its value is not changed. When it fails (i.e. when the actual
value of a number is not compatible to / cannot be represented by the type), a trap is
raised.

При этом:
Код:
MODULE Proba;

IMPORT KernelLog, Commands;

PROCEDURE Test*(c : Commands.Context);
VAR i : UNSIGNED8;
BEGIN
i := 255;
KernelLog.String("SIGNED64(i) "); KernelLog.Int(SIGNED64(i),0); KernelLog.Ln;
KernelLog.String("SIGNED64(UNSIGNED16(i)) "); KernelLog.Int(SIGNED64(UNSIGNED16(i)),0); KernelLog.Ln;
END  Test;

END Proba.Test 

Печатает в 32-разрядной Windows версии вот что:
Код:
SIGNED64(i) -4294967041
SIGNED64(UNSIGNED16(i)) 255

Пытался также посмотреть в сообщении об обычном Обероне, но там тоже как-то скупо.

Автор:  Sergej Durmanov [ Понедельник, 27 Апрель, 2020 14:45 ]
Заголовок сообщения:  Re: Как работает явное преобразование целочисленных типов?

Должно быть 255. Так что 1) это баг, 2) всё верно.
У type guard форма записи ( e )T

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/