gpt4 book ai didi

将枚举定义转换为无符号整数

转载 作者:太空狗 更新时间:2023-10-29 17:10:10 24 4
gpt4 key购买 nike

根据这篇 SO 帖子:
What is the size of an enum in C?
枚举类型具有 signed int 类型。

我想将枚举定义从 signed int 转换为 unsigned int

例如,在我的平台上,unsigned int 是 32 位宽。我想创建一个枚举:

typedef enum hardware_register_e
{
REGISTER_STATUS_BIT = (1U << 31U)
} My_Register_Bits_t;

我的编译器提示上面的定义超出范围(这是针对 signed int)。

如何声明 unsigned int enum 值?

编辑 1:

  1. 最好不要扩展到 64 位(因为代码驻留在在嵌入式系统中)。
  2. 由于技能限制,此项目不允许使用 C++。 :-(

编辑2:

  • 编译器是 IAR Embedded Workbench for ARM7。

最佳答案

According to this SO post: What is the size of an enum in C? enum types have signed int type.

事情是 enum 类型 可以int 类型,但它们不是 C 中的 int。在 gcc 1)enum类型默认为unsigned int

enum 常量是 intenum 类型是实现定义的。

在您的例子中,enum 常量是 int,但您给它的值不适合 int。您不能在 C 中使用 unsigned int enum 常量,因为 C 表示它们是 int


<子>1) gcc 实现定义枚举类型文档:“通常,如果枚举中没有负值,则类型为无符号整数,否则为 int”,在 http://gcc.gnu.org/onlinedocs/gcc/Structures-unions-enumerations-and-bit_002dfields-implementation.html

关于将枚举定义转换为无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11314545/

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