在ada中使用mod运算符

时间:2010-04-26 06:14:22

标签: ada

任何人都可以告诉我以下声明的用法。我是ada语言的初学者。我曾尝试过互联网,但这还不够清楚。

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

2 个答案:

答案 0 :(得分:3)

Unsigned_4是一个“模块化类型”,取值为0,1,... 14,15,并包裹。

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

您只需要4位来实现该类型,因此可以将其指定为其大小(我认为这可能只是一个确认规范,因为编译器已经清楚地知道它;如果您希望将其放入3中比特并说for Unsigned_4'Size use 3;编译器会告诉你你错了。)

大多数编译器都希望至少在一个字节中存储该类型的值,以实现高效访问。当您在打包记录(pragma Pack)中使用类型时,最小大小就会出现。

答案 1 :(得分:1)

“是mod”是Ada说这是modular type的方式。模块化类型在C中有点像unsigned类型:它们没有负值,一旦达到最大可表示值,如果添加一个,则会得到0。

如果你在Ada中尝试使用普通(非模块化)整数,你会得到constraint_error