Afficher nombre en binaire ameliorer

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 645 fois - Téléchargée 34 fois

Contenu du snippet

Avec les commentaires !!!

Source / Exemple :


// pour simplifier, on se met sur 16 bits :
// soit le nombre (en binaire) 'n' = 0000000101010001
// on veut afficher "101010001" (on oublie les permiers '0')
// 
// sizeof(unsigned int)*CHAR_BIT 
//  = 16  (en decimal)
// 1 << sizeof(unsigned int)*CHAR_BIT 
//  = 10000000000000000 (en binaire) ATTENTION un bit en plus !
// 1 << (sizeof(unsigned int)*CHAR_BIT - 1)
//  = 1000000000000000 (en binaire)
// 
// donc mask = 1000000000000000
// Pour savoir si le 16eme bit est a 0 ou 1, on fait
// un et entre 'n' et le mask
// *Si bit=0 => (n & mask) = 0000000000000000
// *Si bit=1 => (n & mask) = 1000000000000000
// Donc il suffit de tester 'n & mask'
// 
// if(n & mask)
//  // ici le bit 16 est 1
// else
//  // ici le bit 16 est 0
// 
// Ensuite pour passer au bit 15, on decale vers la droit
// 'mask' = 0100000000000000
// Pour cela on fait 'mask >>= 1'
// 
// 
// Pour information :
// 
// (condition) ?                valeur1 : valeur2;
//                                        |         |
//                                        |         |
//                                        |         |
//  si la condition est vrai    _______/         |
//  si la condition est fausse  ________________/
// 
// 
#include <stdio.h>    // printf
#include <limits.h>   // CHAR_BIT
#include <conio.h>    // getch
#include <stdlib.h>    // atoi
// affiche le nombre 'n' en binaire
void PrintBinaryNumber(unsigned int n)
{
unsigned int mask;
mask = 1 << (sizeof(unsigned int)*CHAR_BIT - 1);
// l'algorithme ne marche pas quand n=0 (boucle infinie)
if(n == 0)
  {
  printf("0");
  return ;
  }
// on passe les premiers zeros
while(!((mask) & n))
  {
  mask >>= 1;
  }
// on affiche a partir du pemier "1"
do
  {
  printf((n & mask) ? "1" : "0");
  }while(mask >>= 1); // on decale vers la droite 'mask'
}
// affiche les nombres que l'on rentre en binaire
int main(int argc,char **argv)
{
int   number;
char  buf[256];
// on quitte si on rentre 0 ou pas un nombre !
while((number = atoi(gets(buf))))
  {
  PrintBinaryNumber(number);
  printf("\n\n");
  }
return 0;
}

A voir également

Ajouter un commentaire Commentaires
cs_NiFF
Messages postés
92
Date d'inscription
dimanche 2 juin 2002
Statut
Membre
Dernière intervention
24 juin 2004

16 juil. 2003 à 15:44
J'ai posté un exemple bien meilleur :
http://www.cppfrance.com/article.aspx?Val=2214

Prends-en de la graine!
cs_NiFF
Messages postés
92
Date d'inscription
dimanche 2 juin 2002
Statut
Membre
Dernière intervention
24 juin 2004

16 juil. 2003 à 15:34
trop long, trop compliqué
cs_JCDjcd
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
4
4 juil. 2003 à 10:31
essaye, a toi de le faire !
mais il faut aussi le faire + rapide !! et plus petit !!!!!!!!!!!!!

Bonne Chance !
surfeurnet
Messages postés
68
Date d'inscription
vendredi 28 février 2003
Statut
Membre
Dernière intervention
17 août 2005

4 juil. 2003 à 00:05
On peut faire plus simple peut-être ?

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.