Bonjour,
je voulais savoir comment convertir dans un programme en c un int8 en un nombre binaire?Est-ce juste un problème de format?
Merci bonne journée à tous!
-----
Bonjour,
je voulais savoir comment convertir dans un programme en c un int8 en un nombre binaire?Est-ce juste un problème de format?
Merci bonne journée à tous!
Bonjour.
int8 veut dire entier 8 bits. C'est un synonyme de char.
Par contre, nombre binaire, je ne vois pas. int8, c'est du binaire,
char c'est du binaire, int32, int64, float etc… Bref, sur un PC
il y a finalement assez peu de choses qui ne soient pas binaires.
Pascal
je sais que int8 est un entier ; je cherches comment définir un nombre binaire (si on peut) et quel format il a dans une boucle d'affichage
ex : pour un int8, c'est %d
pour un binaire?
Je ne suis pas sur d'avoir bien saisi ta question, mais c'est peut être ça que tu cherche :
Hexadécimal : 0x42;
Binaire : 0b01000010;
Decimal : 66
Bonjour,
Il n'y a pas de formatage standard pour afficher une valeur entière en binaire, il te faut écrire une petite fonction qui crée une chaine contenant ce qu'il faut.
La curiosité est un très beau défaut.
Bonjour
Comme le dit whoami, il n'y a pas d'option dans les fonctions standard pour l'affichage en format binaire.
Voici un exemple de programme pour afficher un octet en binaire sur le flux de sortie standard :
Code:void affiche_binaire (unsigned char entier8bits) { int i; unsigned long resultat = 0; for (i=0; i<8; i++) { resultat <<= 4; if (entier8bits & 0x80) resultat++; entier8bits <<= 1; } printf("%08X", resultat); }
si j'ai bien compris, tu cherches à afficher en binaire avec un printf() .
Il n'y a pas de convertisseur de format "%b", dumoins pas en standard (je crois que certaines bibliothèques l'on). Il te faut t'écrire ta propre fonction pour faire ça. Tu auras des tas d'exemples en googlant "printf binary" ...
edit: oops, je n'avais pas vu que plusieurs personnes avaient répondu ce qu'il faut le temps que je rédige ma réponse...
Merci de vos réponses, je prend note et vous tiens au courant de l'avancement...
Pour le fun, en voilà une autre qui donne le résultat sous forme de chaîne de caractères :Code:char resultat[9]; void chaine_binaire(unsigned char entier8bits) { int i; char* p = resultat; for (i=0; i<8; i++) { *p++ = (entier8bits & 0x80) ? '1' : '0'; entier8bits <<= 1; } *p = '\0'; }
Ou encore ...
my 2 cents : "char* p" est très déconseillé ... mettre plutôt "char *p" ...Code:char resultat[9]; void chaine_binaire(unsigned char entier8bits) { unsigned char i; for (i=0; i<8; i++) { resultat[i] = (entier8bits & 0x80) ? '1' : '0'; entier8bits <<= 1; } resultat[9] = '\0'; }
<< L'histoire nous apprend que l'on apprend rien de l'histoire. >>
Mouais... Déconseillé chez les débutants ou les myopes, peut-être. On doit normalement savoir que le '*' doit être répété dans le cas de déclarations en chaîne qui, elles, sont justement déconseillées, ne serait-ce que pour commenter correctement le code. Ça permet aussi de rappeler que la variable 'p' est de type 'char*'.
En fait, déconseillé par K&R ... ... de plus si on veut pinailler, char* n'est pas un type ... le type est char, et * indique comment utiliser la variable, donc logique de coller le * à la variable et non au type ...Mouais... Déconseillé chez les débutants ou les myopes, peut-être. On doit normalement savoir que le '*' doit être répété dans le cas de déclarations en chaîne qui, elles, sont justement déconseillées, ne serait-ce que pour commenter correctement le code. Ça permet aussi de rappeler que la variable 'p' est de type 'char*'.
Après, chacun fait comme bon lui semble ...
... et à la limite si c'est pour bidouiller tout seul dans un coin, peut importe ... c'est quand tu bosse à 20 sur un projet 'pro' pendant quelques mois, que ce genre d'écriture finit TOUJOURS par faire perdre du temps à quelqu'un ...
<< L'histoire nous apprend que l'on apprend rien de l'histoire. >>
Bonjour,
Pour PA5CAL et Seb.26 :
Utilisation de variable globale : à éviter (il n'y a que quelques rares cas où on est obligé d'en utiliser, celui-ci n'en fait pas partie).
Programmer proprement implique qu'une fonction doit recevoir en paramètres tout ce dont elle a besoin, y compris pour renvoyer un résultat.
Non, absolument pas. Le type de 'p', c'est pointeur vers 'char'.
C'est justement ce type de notation qui rend la notion de pointeur en C particulièrement difficile pour les débutants, ce qui entraîne encore souvent des erreurs de compréhension et d'utilisation après des mois de pratique.
Par ailleurs, la seule erreur qui découle de l'écriture «char* p» est immédiatement et automatiquement repérée à la compilation au niveau de l'utilisation de la variable mal déclarée (par exemple «char* p, q;» avec 'q' utilisé comme pointeur), tandis qu'une mauvaise manipulation de pointeurs peut passer inaperçue jusqu'aux tests, voire plus tard.
C'est le genre de bêtise qui coûte cher aux entreprises au bout du compte, parce que c'est justement aux moins aguerris que revient généralement la tâche de «pisser de la ligne». On perd du temps à déboguer, et parfois après un retour de chez le client lorsqu'on n'a pas été exhaustif au niveau des tests...
Il ne faut pas prendre tout ce que Kernighan et Ritchie ont écrit pour parole d'évangile, et s'autoriser à prendre un peu de recul quand on a une expérience suffisante (près de trois décennies en ce qui me concerne, dont deux professionnellement sur de gros projets).
Quoi qu'il en soit, l'important c'est de fixer les règles de codage dès le départ aux équipes de développement. Les projets sérieux se doivent d'ailleurs de fournir des documents spécifiques expliquant ce point.
.
Exact. Sauf qu'ici on donne seulement un exemple du principe à appliquer, pas du code à copier-coller dans un projet.
Le code "propre" (avec test de non nullité du pointeur et tout le tintouin) prendrait plus de lignes et deviendrait beaucoup moins illustratif.
Bonjour,
Désolé, mais donner du code "sale" en exemple n'est pas une solution "propre", ou alors préciser ce qu'il en est, et pourquoi.
'char' c'est le type de la donnée pointée, pas le type de la variable déclarée, qui est bien de type '(char *)'. En cela, la syntaxe du C crée une difficulté qui ne va pas dans le sens de la lisibilité du code.
Puisque « char* toto, titi; » déclare 'toto' de type pointeur et 'titi' de type caractère, il est bien sûr préférable d'écrire « char *toto, titi; » dans ce cas. Mais « char* toto; char titi; » c'est encore mieux.
Le langage C n'est qu'un vieil outil générique, et il convient d'adapter son usage aux impératifs qui se présentent.
Mais bon comme tu dis, on ne va pas passer la nuit là-dessus, surtout qu'on n'est pas sur le forum «Informatique».
Je ne vais pas non plus écrire un roman pour expliquer des choses qui sont finalement sans rapport avec le sujet, lequel ne concerne que la conversion au format binaire. Je pars du principe que le lecteur connaît le contexte de son code (chose qu'on ignore ici a priori) et qu'il est capable d'y adapter l'exemple donné. On n'est pas là pour donner un cours exhaustif de programmation en C.
Ou alors préfères-tu carrément ne pas donner d'exemple ? Demande à flolarajasse ce qu'il en pense.
.