在C ++ 11 7.2.7中它说:
对于[具有非固定基础类型]的枚举,其中
e_min
是最小的枚举数且e_max
是最大的,枚举的值是{{1}范围内的值}b_min
定义如下... [snip]
我不明白它在这里定义了什么。可能值[b_max
,b_min
]的范围与枚举器[b_max
,e_min
]的范围有何不同?
也许一个例子有助于特定的枚举定义和e_max
,e_min
,e_max
和b_min
的计算?
答案 0 :(得分:4)
在C ++中,您可以使用枚举作为位掩码。
例如:
enum Flag {
Read = 1 << 0,
Write = 1 << 1,
WithSugar = 1 << 2
};
然后你可以说:Flag f = Read | Write | WithSugar;
和f
的值已经完美定义:assert(f == 7);
!
它继承自C ......
在我们的案例中,规则规定Flag
应该能够将0
(枚举为正,除非存在负面枚举数)的任何值表示为7
。
值7
取决于获取最大的枚举数(WithSguar
:4)并查找k
以使2^(k-1) <= 4 < 2^k - 1
。然后,最大可表示值为2^k-1
。如果你考虑二元补码中的值的按位表示是有意义的:4
是100
所以你可以用00
填充1
而不占用更多空间, 111
为最大值,恰好为7
。