IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

représentation binaire-->entier


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 14
    Points
    14
    Par défaut représentation binaire-->entier
    Bonsoir,

    Voilà je n'arrive pas à comment marche la fonction qui transforme une représentation binaire d'un entier en sa valeur.

    En fait le but est d'abord de vérifier si une chaine de caractère (représentation binaire d'un entier) n'est composée que de 0 et de 1, ensuite si cela est vrai elle doit retourner la valeur de cet entier.

    D'apres le peu que j'ai compris , on utilise un 'mask' valant 1 au départ et puis on parcourt la chaine de droite à gauche et une fois qu'on a trouvé qu un bit est égal un 1, on fait (n=n|mask)...
    et c'est cette étape que je n'arrive pas à saisir...
    Si quelqu un peut m'aider à comprendre cette fois, je lui serait reconnaissante..

    Cordialement


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    int StrToBin(char *str)
     
      {
       int mask=1;
       int n=0;
       int l=strlen(str)-1;
     
    while(c<=str)
             {if (*c!='0' && *c!='1')
                      error(1);
              if(*c=='1')
                   {n=n|mask;
                    mask<< 1;
                   c--;
              }
    return n ;
    }

  2. #2
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Salut,

    La fonction va mettre à 1 le rang binaire de ta valeur (donc n) à chaque fois qu'il rencontre un caractère '1' dans ta chaîne.
    La variable mask ne fait que représenter ce rang binaire par un décalage de 1 vers la gauche.
    La variable mask prendra les valeurs suivantes : 1 (2^0), 2 (2^1), 4 (2^2) etc...

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const char *binaire = "0101" ;
    unsigned int n = 0 ;
    unsigned int mask = 1 ;
    En commençant par la droite:
     caractère 1 = '1' alors n |= mask, donc n = 1 : mask<<=1 <=> mask=2
     caractère 2 = '0' alors ne rien faire : mask<<=1 <=> mask=4
     caractère 3 = '1' alors n|= mask, donc n = 1+4 = 5 : mask<<=1 <=> mask=8
     caractère 4 = '0' alors ne rien faire : mask<<=1 <=> mask=16
     etc...
    Maintenant, ta fonction :
    1. 'c' n'est pas déclaré ET n'est pas intialisé.
    2. tu ne traites pas le caractère '0', donc ton masque ne prendra pas la bonne valeur binaire. Il passera au rang binaire que si ton caractère est à '1'.
    3. mask<<1 ne fonctionne pas. Essaye avec mask<<=1
    4. Ta boucle while ne traite pas la longueur de la chaine.

    Voila et bonne continuation

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 14
    Points
    14
    Par défaut
    Je vous remercie pour votre réponse...

    mais ce qui m'embete c'est que par exemple quand on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      0101  (n)
    |
      0001  (mask)
    --------
      0101  (n|mask)
    donc (n|mask) c'est une chaine de caracteres (entier en binaire) ou bien c'est un int ?

  4. #4
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Citation Envoyé par felicity
    ...donc (n|mask) c'est une chaine de caracteres (entier en binaire) ou bien c'est un int ?
    Non, n|mask n'est pas une chaine.
    n est déclaré comme un entier (int) [devrait être même unsigned int]
    mask est déclaré comme un entier aussi [idem qu'au-dessus].

    Donc pour n |= mask (equivalent à n = n | mask) se sont bien des entiers (int).

    Ne pas confondre le caractère '1' et la valeur du bit à 1.

    nota : je vais corriger mon premier post, pour éviter de t'embrouiller entre '1' et 1.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 14
    Points
    14
    Par défaut
    D'accord et je vous remercie encore une fois!

    Sinon, y aurait pas des sites ou je pourrais réviser les masks et les tables de hachage?

  6. #6
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Tout dépend de ce que tu veux savoir, je sais que tu ne va pas aimer ma réponse mais :

    is your friend.

    En fait tout dépend de ton niveau sur les tables de hachage : aucun concept, concepts de base, connaissance avancée / analyse de complexité, ...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par PRomu@ld
    Tout dépend de ce que tu veux savoir, je sais que tu ne va pas aimer ma réponse mais :

    is your friend.

    En fait tout dépend de ton niveau sur les tables de hachage : aucun concept, concepts de base, connaissance avancée / analyse de complexité, ...
    Faut dire que cette fois, google m'a trahi...

    Je cherche un cours et des exercices de bases si quelqu un peut me renseigner.

    Merci et bonne fin de soirée à toutes et à tous!!

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/03/2013, 15h28
  2. Réponses: 4
    Dernier message: 24/04/2008, 16h09
  3. [Type Double] Représentation binaire?
    Par sekiryou dans le forum C++
    Réponses: 4
    Dernier message: 17/04/2008, 19h17
  4. [debutant] obtenir la représentation binaire d'un code ascii
    Par coco21 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 08/11/2007, 10h06
  5. CRITERIA - Représentation binaire d'un nombre décimal signé.
    Par RamDevTeam dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 10/08/2005, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo