Casting enum définition de unsigned int

Selon cette SORTE de poste:

Quelle est la taille d'un enum en C?

les types enum ont signed int type.

Je voudrais convertir un enum définition de signed int à unsigned int.

Par exemple, sur ma plate-forme d'un unsigned int 32-bits de large.
Je veux créer un enum:

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

Mon compilateur se plaint que la définition ci-dessus est hors de portée (ce qui est pour un signed int).

Comment dois-je déclarer unsigned int enum valeurs?

Edit 1:

  1. La préférence n'est pas de l'étendre à d'64 bits (car le code réside
    dans un système embarqué).
  2. En raison des limites des compétences, le C++ n'est pas autorisé pour ce projet. 🙁

Edit 2:

  • Compilateur est IAR Embedded Workbench pour ARM7.
Pour être clair, est le C++, une option?
Je le souhaite. Je peux créer un type réel si ils nous permettent d'utiliser C++. 🙁
REGISTER_STATUS_BIT = ~0x7fffffff?
Est-ce portable? Veuillez soumettre une réponse.
est tout aussi portable que -2147483648. Ils évaluent de la même séquence de bits. Les mêmes restrictions que j'ai présenté dans ma réponse s'appliquent.

OriginalL'auteur Thomas Matthews | 2012-07-03