如何解决以十六进制定义的枚举值增长并变成负值
我正在维护一个包含以下枚举类型定义的项目。枚举值用于 一个组合框。
-
为什么这个枚举类型以这样的十六进制定义,以提高性能?
-
xxxxx920P3 实际上是一个负值 -2147483648 而 xxxxx920P2 是正值,它会导致条件代码失败。下一个值将是 xxxxx920P3 的两倍,那么这个枚举定义规则的任何替代解决方案?谢谢。
-
这是一个 QT c++ 项目。我可以将枚举类型定义为 ULONGLONG 吗?
enum Version { xxxxx = 0x00000000,xxxxx400 = 0x00000001,xxxxx401 = 0x00000002,xxxxx410 = 0x00000004,xxxxx411 = 0x00000008,xxxxx412 = 0x00000010,xxxxx420 = 0x00000020,xxxxx430 = 0x00000040,xxxxx431 = 0x00000080,xxxxx432 = 0x00000100,xxxxx440 = 0x00000200,xxxxx500 = 0x00000400,xxxxx510 = 0x00000800,xxxxx520 = 0x00001000,xxxxx521 = 0x00002000,xxxxx600 = 0x00004000,xxxxx611 = 0x00008000,xxxxx620 = 0x00010000,xxxxx621 = 0x00020000,xxxxx700 = 0x00040000,xxxxx910 = 0x00080000,xxxxx910P5 = 0x00100000,xxxxx910P6 = 0x00200000,xxxxx910P11 = 0x00400000,xxxxx910P12 = 0x00800000,xxxxx910P13 = 0x01000000,xxxxx910P14 = 0x02000000,xxxxx910P15 = 0x04000000,xxxxx910P16 = 0x08000000,xxxxx920 = 0x10000000,xxxxx920P1 = 0x20000000,xxxxx920P2 = 0x40000000,xxxxx920P3 = 0x80000000,}; Versions newVersions = (Version)mComboBox->itemData(inIndex).toUInt(); if ( newVersions < xxxxx500) //now newVersions is a negative value { } else { }
解决方法
在标准 C 中,枚举器的类型为 int
,并且值必须在 int
的范围内。 0x80000000
超出 int
的范围,这是需要诊断的约束违规。
所以发生的事情取决于你的编译器。编译器为超出 int
范围的枚举器实现了它自己设计的扩展。根据您发布的证据,编译器为该枚举器提供了 INT_MIN
(一个很大的负数)值。
您必须在设计代码时考虑到这一点,例如有针对xxxxx920P3的版本测试的特定分支。
当枚举包含一堆一位标志时,通常可以将它们组合在一起,例如xxxxx600 | xxxxx700 | xxxxx432
可以使用单个值来表示任何大小的元素集。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。