gpt4 book ai didi

C++ - 枚举范围? Bjarne Stroustrup 书

转载 作者:行者123 更新时间:2023-11-28 06:46:51 24 4
gpt4 key购买 nike

我正在阅读 Bjarne S 的 C++ 编程语言。
在第 77 页,第 4.8 节中,我发现了这一点:

"枚举器可以用常量表达式初始化(§C.5) 的整数类型 (§4.1.1)。这枚举的范围包含向上舍入到最接近的所有枚举的枚举器值较大的二进制幂减 1 。如果最小的枚举数是非负的,则范围下降到 0如果最小的枚举数为负,则为最接近的较小的负二元幂。这定义了最小位域能够保存枚举器值。例如:

enum  e1 { d a r k , l i g h t }; // range 0:1

enum e2 { a = 3 , b = 9 }; // range 0:15

enum e3 { m i n = 10 , m a x = 1 0 0 0 0 0 0 }; // range -1048576:1048575

我不明白为什么 enum3 有那个范围

(1048576:1048575)? - (- 2^20 : 2^20 - 1)

最佳答案

这应该是您的版本中的错字。在同一本书的我的版本(The C++ programming langage - special edition,第 12 次打印,2005 年 5 月)中,我阅读了

enum e3 { min = -10, max = 1000000 }; 

与正文相符。

补充说明:

Stroustrup 解释说,该范围基于能够保存枚举器值的最小位域。使用 20 位,您可以表示 2^20=1048576 个不同的值。当您从 0 而不是 1 开始计数时,您可以达到最大 2^20-1。这解释了最高范围。

现在他解释说,如果最小的枚举数是非负数,范围会下降到 0。这意味着如果 min = 10,则范围将从 0 到 1048575。

他还解释说,如果最小枚举数为负数,则最小范围应四舍五入到最接近的较小的负二元幂,这适用于min = -10。仅这句话就会产生歧义:您可能认为低于 -10 的最小二乘方为 -16。但这句话必须与范围由能够保存值的最小位域 定义这一事实联系起来。因此,您需要 20 位 + 符号位,并且根据约定,您可以用它来表示从 -2^20 到 +2^20-1 的值。

关于C++ - 枚举范围? Bjarne Stroustrup 书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24826853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com