Tout le monde fait des fonctions complique pour comparer des nombres avec des puissances de deux mais il y a une maniere beaucoup plus simple avec les unions
Source / Exemple :
#include <stdio.h> /* pour printf */
#include <conio.h> /* pour getch */
/*
Nouveau type de char, il prend exactement la meme place en
memoire qu'un vrai char.
C'est une union donc chaque membre de la structure occupera
la meme place en memoire.
typedef union NEWCHAR
{
unsigned char dec; /* decimal */
struct
{
bool bit8:1; /* binaire, le :1 */
bool bit7:1; /* signifie que la */
bool bit6:1; /* variable n'intervient */
bool bit5:1; /* que sur un seul bit */
bool bit4:1; /* de la structure */
bool bit3:1;
bool bit2:1;
bool bit1:1;
};
struct
{
unsigned int hexa2:4; /* hexadecimal, le :4 */
unsigned int hexa1:4; /* pour seulement 4 bits */
};
};
/*
les sous-structure de NEWCHAR ne porte pas de nom, ça permet d'acceder
a leurs variables comme ci elles appartenaient directement a NEWCHAR
et que en meme temps toutes leurs variables n'en valent qu'une seule
dans l'union
int main()
{
NEWCHAR octet;
octet.dec=173; /* octet = 173 */
/* binaire */
printf("binaire : %d%d%d%d%d%d%d%d\n",octet.bit1,octet.bit2,octet.bit3,octet.bit4,octet.bit5,octet.bit6,octet.bit7,octet.bit8);
/* hexadecimal */
printf("hexadecimal : ");
if (octet.hexa1>9) printf("%c",octet.hexa1+55);
else printf("%d",octet.hexa1);
if (octet.hexa2>9) printf("%c\n",octet.hexa2+55);
else printf("%d\n",octet.hexa2);
/* decimal */
printf("decimal : %d",octet.dec);
getch();
return 0;
}
Conclusion :
voila c'est vraiment pas complique
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.