langage C
Répondre à la discussion
Affichage des résultats 1 à 21 sur 21

langage C



  1. #1
    flolarajasse

    langage C


    ------

    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!

    -----
    Java is the best!

  2. #2
    Murayama

    Re : langage C

    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

    Citation Envoyé par flolarajasse Voir le message
    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!

  3. #3
    flolarajasse

    Re : langage C

    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?
    Java is the best!

  4. #4
    guicara

    Re : langage C

    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

  5. A voir en vidéo sur Futura
  6. #5
    whoami

    Re : langage C

    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.

  7. #6
    b@z66

    La curiosité est un très beau défaut.

  8. #7
    PA5CAL

    Re : langage C

    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);
    }

  9. #8
    mat64

    Re : langage C

    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...

  10. #9
    flolarajasse

    Re : langage C

    Merci de vos réponses, je prend note et vous tiens au courant de l'avancement...
    Java is the best!

  11. #10
    whoami

    Re : langage C

    Bonjour,

    [TROLL]

    Citation Envoyé par mat64 Voir le message
    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...
    Le premier message en question a été posté plus d'une heure avant le tien, j'en déduis que tu écris très, très, très lentement.

    [/TROLL]

  12. #11
    mat64

    Re : langage C

    Citation Envoyé par whoami Voir le message
    Le premier message en question a été posté plus d'une heure avant le tien, j'en déduis que tu écris très, très, très lentement.
    taquin va, je suis un fan du matériel vintage, mon PC n'a pas de clavier et je compose tous mes messages sur des cartes perforées

  13. #12
    PA5CAL

    Re : langage C

    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';
    }

  14. #13
    Seb.26

    Re : langage C

    Ou encore ...

    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';
    }
    my 2 cents : "char* p" est très déconseillé ... mettre plutôt "char *p" ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  15. #14
    PA5CAL

    Re : langage C

    Citation Envoyé par Seb.26 Voir le message
    my 2 cents : "char* p" est très déconseillé ... mettre plutôt "char *p" ...
    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*'.

  16. #15
    Seb.26

    Re : langage C

    Citation Envoyé par PA5CAL Voir le message
    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 ...

    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. >>

  17. #16
    whoami

    Re : langage C

    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.

  18. #17
    PA5CAL

    Re : langage C

    Citation Envoyé par Seb.26 Voir le message
    le type est char, et * indique comment utiliser la variable, donc logique de coller le * à la variable et non au type ...
    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.

    .
    Dernière modification par PA5CAL ; 08/06/2010 à 15h47.

  19. #18
    PA5CAL

    Re : langage C

    Citation Envoyé par whoami Voir le message
    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).
    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.

  20. #19
    Seb.26

    Re : langage C

    Citation Envoyé par PA5CAL Voir le message
    Non, absolument pas. Le type de 'p', c'est pointeur vers 'char'..
    La preuve que non : tu ne peux pas déclarer "char* toto, titi;" ...

    Mais bon, on va pas y passer la nuit ...

    Bonne continuation, @+
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  21. #20
    whoami

    Re : langage C

    Bonjour,
    Citation Envoyé par PA5CAL Voir le message
    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.
    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.

  22. #21
    PA5CAL

    Re : langage C

    Citation Envoyé par Seb.26 Voir le message
    La preuve que non : tu ne peux pas déclarer "char* toto, titi;" ...
    '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».

    Citation Envoyé par whoami Voir le message
    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.
    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.

    .
    Dernière modification par PA5CAL ; 08/06/2010 à 22h47.

Discussions similaires

  1. de langage C en langage assembleur
    Par invite284746c1 dans le forum Électronique
    Réponses: 1
    Dernier message: 14/05/2009, 12h42
  2. langage
    Par zerfa3dz dans le forum Psychologies (archives)
    Réponses: 6
    Dernier message: 04/04/2009, 11h05
  3. Langage C
    Par invitee5fedd72 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 26/02/2007, 05h22
  4. Langage C
    Par invitee5fedd72 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 14/02/2007, 19h47
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...