gpt4 book ai didi

c++ - 枚举范围困惑

转载 作者:太空狗 更新时间:2023-10-29 20:31:30 25 4
gpt4 key购买 nike

如何找到枚举的范围?当最低值为负数时,我有两个不同的版本。Stroustrup 说对于

 enum e3 { min = -10 , max = 1000000 }; // range -1048576:1048575

但是C++ Primer Plus 第 5 版说

for eg if the smallest enumerator is -6, the next power of two [times a minus sign] is -8, and thus the lower limit is -7

我很困惑哪个是正确的?

最佳答案

我相信两者都是正确的(不过请参阅下面的 Primer 定义),具体取决于您想要的兼容性。正式定义是

For an enumeration where e min is the smallest enumerator and e max is the largest, the values of the enumeration are the values of the underlying type in the range b min to b max , where b min and b max are, respectively, the smallest and largest values of the smallest bit-field that can store e min and e max .

对于负数,问题是我们使用什么表示。它的脚注说

On a two’s-complement machine, b max is the smallest value greater than or equal to max (abs(e min ) − 1 ,abs(e max ) ) of the form 2 M − 1; b is zero if e is non-negative and − (b + 1 ) otherwise.

如果您假设符号大小或补码,则示例枚举的范围为 -1048575:1048575。对于二进制补码,您会在负数范围内再得到一个。 Primer 的定义缺少最大枚举器值,所以我不确定它是如何达到下限 -7 的。如果您想最大程度地与其他实现兼容,我会选择 -1048575:1048575

关于c++ - 枚举范围困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4167904/

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