5

这来自在线 Ada 参考手册: http: //www.adaic.org/resources/add_content/standards/05rm/RM.pdf (第 2.3 节)

A decimal_literal is a numeric_literal in the conventional decimal notation (that is, the base is ten). 
Syntax 
decimal_literal ::= numeral [.numeral] [exponent] 
**numeral ::= digit {[underline] digit}** 
exponent ::= E [+] numeral | E – numeral
digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
An exponent for an integer literal shall not have a minus sign. 
Static Semantics 
**An underline character in a numeric_literal does not affect its meaning.** The letter E of an exponent can be 
written either in lower case or in upper case, with the same meaning.

如果我做

my_literal ::= 123_456;

下划线(下划线)是什么意思?它说它不影响意思。那它是干什么用的?我相信有一个简单的答案,但阅读和重新阅读这篇文章并没有帮助我。

4

1 回答 1

7

这与货币或 [其他大] 数字中的逗号 ( ,) 的原因相同:分组。因此:

Million : Constant:= 1_000_000;

此外,您可以将它与 base-setting 结合使用作为掩蔽设置:

Type Bit is Range 1..8;
SubType Byte is Interfaces.Unsigned_8;
Type Masks is Array(Positive Range <>) of Byte;

Mask_Map : Constant Masks(Bit):=
    (
        2#0000_0001#,
        2#0000_0010#,
        2#0000_0100#,
        2#0000_1000#,
        2#0001_0000#,
        2#0010_0000#,
        2#0100_0000#,
        2#1000_0000#
    );

那么也许你会使用 Mask_Map 和 bits 以及or, and, andxor来进行位操作。上述方法似乎比简单定义大量常量并直接操作它们更有效,但它更灵活,您可以稍后将其更改为函数,而不必更改任何客户端代码,这可以如果该函数的结果是参数化整数(其中 bit 具有定义1..PARAMETER'Size.

于 2013-03-07T05:21:59.687 回答