1

谁能告诉我下面显示的以下声明的用法。我是 ada 语言的初学者。我尝试过互联网,但还不够清楚。

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

2 回答 2

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)中使用类型时,最小大小会自行产生。

于 2010-04-26T10:47:56.627 回答
1

“is mod”是 Ada 的说法,即这是一个模块化类型。模块化类型的工作方式有点像unsignedC 中的类型:它们没有负值,一旦你达到最大的可表示值,如果你加一个,你会得到 0。

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

于 2010-04-26T13:55:22.650 回答