Использование мод операторов в ада - PullRequest
1 голос
/ 26 апреля 2010

Может кто-нибудь сказать мне, пожалуйста, использование следующих объявлений, показанных ниже. Я новичок в языке ada. Я пробовал Интернет, но это было недостаточно ясно.

            type Unsigned_4 is mod 2 ** 4;
            for Unsigned_4'Size use 4;

Ответы [ 2 ]

3 голосов
/ 26 апреля 2010

Unsigned_4 - это «модульный тип», принимающий значения 0, 1, .. 14, 15 и округляющий.

   U : Unsigned_4;
begin
   U := Unsigned_4'Last;      -- 15
   U := U + 1;                -- 0

Вам нужно всего 4 бита для реализации типа, так что можно указать это как его Размер (я думаю, что это может быть просто подтверждающая спецификация, так как компилятор уже знает это; биты и сказал for Unsigned_4'Size use 3; компилятор скажет вам, что вы ошиблись).

Большинство компиляторов захотят хранить значения типа как минимум в байте для эффективного доступа. Минимальный размер вступает в свои права при использовании типа в упакованной записи (Pragma Pack).

1 голос
/ 26 апреля 2010

"is mod" - это способ Ады сказать, что это модульный тип . Модульные типы работают примерно так же, как unsigned типы в C: они не имеют отрицательных значений, и как только вы достигнете наибольшего представимого значения, если вы добавите один, вы получите 0.

Если бы вы попробовали то же самое с обычным (немодулярным) целым числом в Ada, вы бы получили constraint_error

...