9.2. 整数内置类型

整数内置类型是int8int16int32int64uint8uint16uint32uint64。 它们表示不同大小的有符号和无符号整数:

  • int8 表示-128127之间的整数值。

  • int16 表示-3276832767之间的整数值。

  • int32 表示-21474836482147483647之间的整数值。

  • int64 表示-92233720368547758089223372036854775807之间的整数值。

  • uint8 表示0255之间的整数值。

  • uint16 表示065535之间的整数值。

  • uint32 表示04294967295之间的整数值。

  • uint64表示018446744073709551615之间的整数值。

9.2.1. 词汇表示

整数值在词汇上表示为可选符号(“+”或“-”),后面跟随一个十进制数字序列。 如果没有指定符号,则假定为“+”。

为方便起见,在为YANG模块中的整数指定默认值时,可以使用代表十六进制或八进制表示法中的值的替代词汇表示法。

十六进制符号由可选符号(“+”或“-”)组成,后跟字符“0x”,后跟十六进制数字,其中字母可以是大写或小写。

八进制符号由一个可选符号(“+”或“-”)组成,后跟字符“0”,后面跟着一些八进制数字。

请注意,如果YANG模块中的默认值具有前导零(“0”),则将其解释为八进制数。 在XML编码中,整数总是被解释为十进制数,并且允许前导零。

例子:

  1. // 合法值
  2. +4711 // 合法正数值
  3. 4711 // 合法正数值
  4. -123 // 合法负数值
  5. 0xf00f // 合法的十六进制值
  6. -0xf // 合法的十六进制值
  7. 052 // 合法的八进制值
  8. // 非法值
  9. - 1 // 中间空格非法

9.2.2. 规范形式

正整数的规范形式不包含符号“+”。 前导零是被禁止的。 零值表示为“0”。

9.2.3. 限制

所有整数类型都可以用“range”语句限制(见第9.2.4节)。

9.2.4. “range”声明

range”语句是“type”语句的可选子语句,它将范围表达式字符串作为参数。它用于限制整型和十进制内置类型,或从它们派生的类型。

一个范围由一个显式值或者一个包含下界的连续点组成,两个连续的点“..”和一个上限界限。可以给出多个值或范围,用“|”分隔。如果给出了多个值或范围,它们都必须是不相交的,并且必须按照升序排列。如果范围限制应用于已经限制范围的类型,那么新的限制必须是等同限制或更多限制,即提高下限,减少上限,删除显式值或范围或将范围拆分为多个范围与中间差距。在范围表达式中给出的每个显式值和范围边界值必须与被限制的类型匹配,或者是特殊值“min”或“max”之一。 “min”和“max”分别表示被限制类型接受的最小值和最大值。

范围表达式语法由第14节中的“range-arg”规则正式定义。

9.2.4.1. range子语句

  1. +---------------+---------+-------------+
  2. | substatement | section | cardinality |
  3. +---------------+---------+-------------+
  4. | description | 7.21.3 | 0..1 |
  5. | error-app-tag | 7.5.4.2 | 0..1 |
  6. | error-message | 7.5.4.1 | 0..1 |
  7. | reference | 7.21.4 | 0..1 |
  8. +---------------+---------+-------------+

9.2.5. 使用示例

  1. typedef my-base-int32-type {
  2. type int32 {
  3. range "1..4 | 10..20";
  4. }
  5. }
  6. typedef my-type1 {
  7. type my-base-int32-type {
  8. // legal range restriction
  9. range "11..max"; // 11..20
  10. }
  11. }
  12. typedef my-type2 {
  13. type my-base-int32-type {
  14. // illegal range restriction
  15. range "11..100";
  16. }
  17. }