Voici les instructions:J'ai besoin d'écrire un programme C qui utilise une structure de l'Union pour définir les bits d'un int
Définir un WORD_T struct de données Union pour un nombre entier de uint16_t de sorte qu'une valeur peut être affectée à un WORD_T entier de trois façons: (1) Pour affecter la valeur à chaque bit de l'entier, (2) Pour affecter la valeur à chaque octet de l'entier, (3) Affecter directement la valeur à l'entier. Je sais que je dois faire quelque chose de différent avec cette première structure, mais je suis assez perdu en général. Voici ce que j'ai:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#define BIT(n) (1 << n)
#define BIT_SET(var, mask) (n |= (mask))
#define BIT_CLEAR(var, mask) (n &= ~(mask))
#define BIT_FLIP(var, mask) (n ^= (mask))
union WORD_T{
struct{
uint16_t integerVar:16
};
struct{
unsigned bit1:0;
unsigned bit2:0;
unsigned bit3:0;
unsigned bit4:0;
unsigned bit5:0;
unsigned bit6:0;
unsigned bit7:0;
unsigned bit8:0;
unsigned bit9:0;
unsigned bit10:0;
unsigned bit11:0;
unsigned bit12:0;
unsigned bit13:0;
unsigned bit14:0;
unsigned bit15:0;
unsigned bit16:0;
};
void setIndividualBit(unsigned value, int bit) {
mask = BIT(value) | BIT(bit);
BIT_SET(n, mask);
}
};
' unsigned bit1: 0; 'signifie que 0 bit est grand, cela n'a pas de sens. Voulez-vous dire 'unsigned bit1: 1;'? – mch
Je pense que mch a raison - 'bit1: 0' dit" utiliser zéro bits des unsigned ", où' bit1: 1' dit "use one bit" – theGleep
Pour éviter certains problèmes d'implémentation, utilisez '#define BIT (n) (1u << n) '(ajouter' u') – chux