#define FOO 1u, 2u, 4u ... Qu'est-1u et 2u veux dire?
Je travaille avec le HCS12, MCU, et cela faisait partie de la bibliothèque. Je me demandais simplement ce qu'
1U, 2U, 4U, 8U... signifie dans ce code. Je suis encore à apprendre comment utiliser les classes, s'il vous plaît essayer d'expliquer les choses en termes simples.
Ma conjecture:
Est-ce que cela signifie bits est aussi élevé?
1U = 00000001
2U = 00000010
...
Quoi cela serait-il appelé?
Grâce
typedef union {
byte Byte;
struct {
byte :1;
byte ADR1 :1; /* Slave Address Bit 1 */
byte ADR2 :1; /* Slave Address Bit 2 */
byte ADR3 :1; /* Slave Address Bit 3 */
byte ADR4 :1; /* Slave Address Bit 4 */
byte ADR5 :1; /* Slave Address Bit 5 */
byte ADR6 :1; /* Slave Address Bit 6 */
byte ADR7 :1; /* Slave Address Bit 7 */
} Bits;
struct {
byte :1;
byte grpADR_1 :7;
} MergedBits;
} IBADSTR;
extern volatile IBADSTR _IBAD @(REG_BASE + 0x000000E0UL);
#define IBAD _IBAD.Byte
#define IBAD_ADR1 _IBAD.Bits.ADR1
#define IBAD_ADR2 _IBAD.Bits.ADR2
#define IBAD_ADR3 _IBAD.Bits.ADR3
#define IBAD_ADR4 _IBAD.Bits.ADR4
#define IBAD_ADR5 _IBAD.Bits.ADR5
#define IBAD_ADR6 _IBAD.Bits.ADR6
#define IBAD_ADR7 _IBAD.Bits.ADR7
#define IBAD_ADR_1 _IBAD.MergedBits.grpADR_1
#define IBAD_ADR IBAD_ADR_1
#define IBAD_ADR1_MASK 2U
#define IBAD_ADR2_MASK 4U
#define IBAD_ADR3_MASK 8U
#define IBAD_ADR4_MASK 16U
#define IBAD_ADR5_MASK 32U
#define IBAD_ADR6_MASK 64U
#define IBAD_ADR7_MASK 128U
#define IBAD_ADR_1_MASK 254U
#define IBAD_ADR_1_BITNUM 1U
Le
U
indique le littéral doit être traitée comme unsigned
.OriginalL'auteur user2066639 | 2013-02-12
Vous devez vous connecter pour publier un commentaire.
Il définit un entier non signé littéral. Vous pouvez également voir où ils ont défini un hex littérale à une
unsigned long integer
en utilisant0x...UL
.Si vous souhaitez connaître le motif de bits qu'ils produisent, il suffit de traduire la virgule littéraux de leur équivalent hexadécimal ou binaire littéraux.
1U
devient0x01U
et01b
1 en hexadécimal et en binaire, respectivement.Un autre plus couramment observés littérale utilise le
f
-suffixe, qui est une simple précision à virgule flottante littéral comme1.0f
.1. à des fins d'illustration uniquement, pas un littéral par le standard
Juste une petite question: quand j'écris: IBAD &= ~IBAD_IBAD6_MASK; je reçois un message d'erreur indiquant que "la perte Possible de données" et quand je lance un int, je n'ai plus cette erreur. IBAD &= (int)(~IBAD_IBAD6_MASK); Pourquoi est-ce? J'ai regardé dans cette pendant une heure, et je ne peux pas trouver une réponse claire.
qu'est-ce que
byte
défini comme? Sonne comme il est signé.Je vais commencer une nouvelle question, ne semblent pas correspondre à ce dans cette zone de texte. Merci pour l'aide! mais pour votre referece: #elif defined(INT_IS_8BIT) typedef unsigned int Byte; typedef signé int sByte;
OriginalL'auteur user7116
Ils sont juste des constantes entières. Le
U
suffixe rend unsigned ints au lieu d'entiers.Cela est décrit dans la section 6.4.4.1 de la projet final de norme C11.
OriginalL'auteur Samuel Edwin Ward
Dans les systèmes Embarqués U littérale signifie que la valeur est le nombre entier non signé
vous pouvez trouver quelques-uns utile de contenu ici.
informations pour les Littéraux
OriginalL'auteur Nisarg