2010-04-26 42 views
1

任何人都可以请告诉我下面显示的以下声明的用法。我是ada语言的初学者。我曾尝试过互联网,但那不够清楚。在ada中使用mod运算符

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

回答

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

“is mod”是Ada的说法,这是一个modular type。模块化类型的工作方式有点类似于C:unsigned类型:它们没有负值,一旦达到最大可表示值,正常(非模块化)整数在阿达,你会得到constraint_error