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 :

conversion en systeme binaire


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1
    Points : 0
    Points
    0
    Par défaut conversion en systeme binaire
    salut,
    voici un programme que je n'ai pas pu réaliser , alors je n'ai que vous demander de m'aider ,

    ecrire un programme en language c qui permet de calculer et afficher le résultat de l'opérateur "et binaire" appliqué sur deux opérandes de type entiers a et b , sans utiliser celui du language c dont sa syntaxe est "&".cet opérateur permet d'effectuer : " et binaire" bit à bit.
    exemple : si a=13 et b=54, en systeme binaire : a=(001101)² et b=(110110)²
    n=a&b , affecte à n la valeur 4=(000100)².

    voici , je vous attend avec pateinc, je dois réaliser ce programme pour demain
    merci d'avance

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    ?

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    C'est une réponse à la Niels Bohr, ça ! :-) Mais je ne suis pas sûr que cela plaise à son professeur…

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Je pense que bannir AND pour mettre OR et XOR à la place tue l'exercice (je m'aperçois d'ailleurs que je perds mes fonctions logiques, ton équivalent me fait peur Neckara XD). En fait, je ne vois pas trop l'intérêt de l'exercice ni comment le résoudre. Tous les opérateurs binaires sont bannis ou seulement le AND ?

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Hello,

    Citation Envoyé par Bktero Voir le message
    Je pense que bannir AND pour mettre OR et XOR à la place tue l'exercice (je m'aperçois d'ailleurs que je perds mes fonctions logiques, ton équivalent me fait peur Neckara XD). En fait, je ne vois pas trop l'intérêt de l'exercice ni comment le résoudre. Tous les opérateurs binaires sont bannis ou seulement le AND ?
    L'énoncé est à peu près clair :
    sans utiliser celui du language c dont sa syntaxe est "&"

    J'imagine que le but de l'exercice est justement de lui faire réimplémenter le ET logique en décortiquant les nombres bit à bit et en appliquant la table de vérité. Même si, en soi, la réponse de Neckara est la plus juste et la plus élégante ! :-) Mais comme je le disais au-dessus, c'est le baromètre de Bohr.

  6. #6
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 516
    Points : 706
    Points
    706
    Par défaut
    je pense que la 1ère étape est de convertir les nombres en binaire. Les opérateur de division entière et de modulo seront bien utiles.

    On peut imaginer stocker ces bits dans un tableau. Il suffit de reprendre les tableaux et de traiter les bits de même rang à l'aide d'opérateurs logiques, arithmétiques ou relationnels.

    A+

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par jackk Voir le message
    je pense que la 1ère étape est de convertir les nombres en binaire.
    Tous les nombres entier (int, char, long int, long long int; signed ou unsigned) sont stockés en binaire. Il n'y a donc pas besoin de convertir les nombres.

    Citation Envoyé par jackk Voir le message
    Les opérateur de division entière et de modulo seront bien utiles.
    Pourquoi utiliser l'opérateur de division? On divise par un multiple de 2, autant utiliser les décalages de bits.

    Citation Envoyé par jackk Voir le message
    On peut imaginer stocker ces bits dans un tableau.
    Quel intérêt ? Pourquoi ne pas les traiter directement ?

  8. #8
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 516
    Points : 706
    Points
    706
    Par défaut
    Tous les nombres entier (int, char, long int, long long int; signed ou unsigned) sont stockés en binaire. Il n'y a donc pas besoin de convertir les nombres.
    Evidemment, mais il faudra bien isoler tous les bits afin d'effectuer le ET.

    Pourquoi utiliser l'opérateur de division? On divise par un multiple de 2, autant utiliser les décalages de bits.
    ok pour remplacer la division par 2 par un décalage à droite. Je suppose que le compilateur aurait été suffisamment futé pour pour le faire de lui-même. En revanche, je ne vois pas trop comment éviter l'opérateur modulo pour récupérer le bit de poids faible, seul le langage d'assemblage permettant à ma connaissance de récupérer la carry.

    Quel intérêt ? Pourquoi ne pas les traiter directement ?
    Effectivement.

    A+

  9. #9
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par jackk Voir le message
    ok pour remplacer la division par 2 par un décalage à droite. Je suppose que le compilateur aurait été suffisamment futé pour pour le faire de lui-même.
    ça va dépendre du compilateur utilisé mais dans le doute, autant mettre le décalage de bit.

    Citation Envoyé par jackk Voir le message
    En revanche, je ne vois pas trop comment éviter l'opérateur modulo pour récupérer le bit de poids faible
    On utilise un mask. Comme on ne peut pas utiliser '&', on va faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char mask = 0xFE;
    char bit = ~( (~number) | mask);
    Je pense que ça sera un peu plus rapide (et puis ça ne fait pas de mal d'apprendre à utiliser des mask^^).

  10. #10
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 516
    Points : 706
    Points
    706
    Par défaut
    Citation Envoyé par Neckara Voir le message
    On utilise un mask. Comme on ne peut pas utiliser '&', on va faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char mask = 0xFE;
    char bit = ~( (~number) | mask);
    Je pense que ça sera un peu plus rapide (et puis ça ne fait pas de mal d'apprendre à utiliser des mask^^).
    Je pense que tu n'as pas lu le fil depuis le début. J'étais dans l'hypothèse de la non utilisation d'opérateurs bitwise.

    A+

  11. #11
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    La consigne de l'exercice est de ne pas utiliser l'opérateur '&'.

    La première solution n'est pas celle attendue car le but de l'exercice serait de faire manipuler les bits un à un.

    Utiliser l'opérateur% est assez simple et son utilisation n'est pas le but premier de l'exercice.

    Par contre en utilisant un mask, on montre qu'on sait les utiliser donc c'est un plus dans l'exercice sans pour autant aller à l'encontre de l'objectif de l'exercice et si le professeur voulait interdire tous les opérateur bitwise, il l'aurait dit explicitement dans la consigne.

    Mais je n'ai jamais dit qu'il fallait utiliser un mask à la place du modulo, je ne fait que répondre à ta question implicite :
    En revanche, je ne vois pas trop comment éviter l'opérateur modulo pour récupérer le bit de poids faible

  12. #12
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 516
    Points : 706
    Points
    706
    Par défaut
    c'est sur que si c'est juste pour éviter l'utilisation de l'opérateur & et uniquement celui-là le problème est trivial. Il existe de nombreuses expressions équivalentes à a & b, parmi lesquelles figure celle que tu as donnée.

    Dans cette hypothèse, la 1ère idée qu'aurait dû avoir anicornis aurait été d'appliquer De Morgan:
    a & b = !(!a | !b) que l'on peut trouver dans n'importe quel cours de logique élémentaire.
    Du coup je ne vois pas trop l'intérêt d'avoir fourni la réponse toute cuite dès le début.

    A+

  13. #13
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Tant qu'à ne pas utiliser le &, autant n'utiliser aucun des opérateurs bit à bit.
    Par exemple :
    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
     
    // nBits, nombre de bits à traiter contenus dans les mots val1 et val2
    unsigned int EtBitaBit(unsigned int val1, unsigned int val2, int nBits)
    {
      int i;
      unsigned int val = 0;
      unsigned int bit = 1;
      for(i=0; i<nBits; i++)
      {
         if( (val1>>1)<<1 != val1 && (val2>>1)<<1 != val2)  val += bit;
         val1 >>= 1;
         val2 >>= 1;
         bit  <<= 1;
      }
      return val;
    }
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  14. #14
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par jackk Voir le message
    Dans cette hypothèse, la 1ère idée qu'aurait dû avoir anicornis aurait été d'appliquer De Morgan:
    a & b = !(!a | !b) que l'on peut trouver dans n'importe quel cours de logique élémentaire.
    Ton code est faux.
    Soit a et b sont des booléens et on fait :
    Soit a et b sont des entiers et on fait :
    Sinon pour avoir donner la solution toute prête...
    Je ne chipoterais pas sur un problème aussi court, un peu compliqué et dont on ne peut pas donner un lien vers le man^^

    Et puis je vois mal comment l'amener à ma solution en le faisant réfléchir sans lui donner directement la solution.
    Après s'il n'a pas passé du temps à chercher avant de poster, je ne vais pas en passer à me casser la tête pour savoir comment lui répondre.

    @diogene :
    Je suis septique quant à l'utilisation de "&&" à la ligne 10.
    C'est trop proche de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(int i =0, j=1; i != max; ++i, ++j)
            val += ( val1 - (val1>>j)<<j  &  val2 - (val2>>j)<<j)<<i

  15. #15
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 516
    Points : 706
    Points
    706
    Par défaut
    Ton code est faux.
    je rappelais simplement comment on peut transformer un ET, qu'il soit booleen ou binaire.

    Et puis je vois mal comment l'amener à ma solution en le faisant réfléchir sans lui donner directement la solution.
    Après s'il n'a pas passé du temps à chercher avant de poster, je ne vais pas en passer à me casser la tête pour savoir comment lui répondre.
    En lui rappelant que l'on peut exprimer différemment des expressions logiques.
    Maintenant, c'est une opinion personnelle que de trouver plus formateur de faire chercher un peu.

    A+

  16. #16
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par jackk Voir le message
    En lui rappelant que l'on peut exprimer différemment des expressions logiques.
    Maintenant, c'est une opinion personnelle que de trouver plus formateur de faire chercher un peu.
    Je suis d'accord mais :
    - je ne vais pas lui faire un cours de calcul booléen ;
    - si je lui dit juste qu'on peut exprimer différemment des expressions logiques ça il le sait déjà : un prof ne donne pas des exercices infaisables ;
    - si ma solution est une solution attendue, il a donc dû avec un cours de calcul booléen et il n'a qu'à aller le relire ;
    - si ma solution n'est pas celle attendue, ça lui aura au moins fait voir une solution différente et ça ne l'empêche pas de rechercher la bonne solution.

    Après je lui avais donné un code de 20 lignes tout fait là je comprendrais.

  17. #17
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 516
    Points : 706
    Points
    706
    Par défaut
    Soit.

    Je serais curieux d'avoir un retour de la part d'anocornis afin de connaitre la solution proposée.

Discussions similaires

  1. [LabView-MATLAB] Conversion de fichier binaire
    Par flzox dans le forum LabVIEW
    Réponses: 3
    Dernier message: 20/01/2007, 18h42
  2. probleme conversion decimal to binaire
    Par aimad41 dans le forum C
    Réponses: 3
    Dernier message: 14/12/2006, 09h45
  3. [Debutant] Conversion Hexa en Binaire
    Par radskin dans le forum C
    Réponses: 6
    Dernier message: 11/09/2006, 10h24
  4. [VB.NET 2.0] conversion caratère en binaire
    Par Emcy dans le forum Windows Forms
    Réponses: 9
    Dernier message: 25/07/2006, 14h07
  5. Conversion ascii=> hexa=>binaire
    Par grunk dans le forum C++
    Réponses: 3
    Dernier message: 27/11/2005, 18h45

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