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 :

Du décimal aux binaire en C++


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    BTS SIO
    Inscrit en
    Janvier 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : BTS SIO

    Informations forums :
    Inscription : Janvier 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Du décimal aux binaire en C++
    Bonjours, je suis en BTS SIO (informatique), je travaille actuellement sur un programme qui va permettre de transcrire une adresse IP du décimal au binaire. Mais j ai quelque problème. Pouvez-vous m'aidez ?

    voici mon code :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    #include<iostream>
    using namespace std;
     
    typedef int Tbinaire1[8];
    typedef int Tbinaire2[8];
    typedef int Tbinaire3[8];
    typedef int Tbinaire4[8];
     
    void convertir1 (int ip1, Tbinaire1 modulo1)
    {
    	int res;
    	int i;
    	i=0;
    	res = 0;
    	while (res >= 1)
    	{
    		res = ip1/2;
    		modulo1[i] = res%2;
    		ip1 = res;
    		i++;
    	}	
    }
     
    void convertir2 (int ip2, Tbinaire2 modulo2)
    {
    	int res;
    	int i;
    	i=0;
    	res = 0;
    	while (res >= 1)
    	{
    		res = ip2/2;
    		modulo2[i] = res%2;
    		ip2 = res;
    		i++;
    	}	
    }
     
    void convertir3 (int ip3, Tbinaire3 modulo3)
    {
    	int res;
    	int i;
    	i=0;
    	res = 0;
    	while (res >= 1)
    	{
    		res = ip3/2;
    		modulo3[i] = res%2;
    		ip3 = res;
    		i++;
    	}	
    }
     
    void convertir4 (int ip4, Tbinaire4 modulo4)
    {
    	int res;
    	int i;
    	i=0;
    	res = 0;
    	while (res >= 1)
    	{
    		res = ip4/2;
    		modulo4[i] = res%2;
    		ip4 = res;
    		i++;
    	}	
    }
     
    void main (void)
    {
    	int ip2, ip3, ip4, ip1;
    	Tbinaire1 binaire1;
    	Tbinaire2 binaire2;
    	Tbinaire3 binaire3;
    	Tbinaire4 binaire4;
    	cout<<" Veuillez saisir l'adresse IP, mettez entrer pour diviser votre @IP en 4 compartiment, merci";
    	cin>>ip1>>ip2>>ip3>>ip4;
    	cout<<"L'adresse IP est "<<ip1<<"."<<ip2<<"."<<ip3<<"."<<ip4;
    	convertir1 (ip1, binaire1);
    	convertir2 (ip2, binaire2);
    	convertir3 (ip3, binaire3);
    	convertir4 (ip4, binaire4);
    	system ("pause");
    }

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut Madmax

    Pourquoi écrire plusieurs fonction convertir alors qu'elles font toute la même chose ? En partant du principe que convertir1 fonctionne, tu as juste à l'appliquer sur tes arguments, pas besoin de convertir2, ni 3 ni 4. C'est justement l'intérêt des fonctions de ne pas dupliquer le code .

    Ce que tu veux faire, c'est la décomposition d'un entier sous sa forme binaire, et je suppose l'afficher ? Voici comment tu peux t'y prendre:

    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
    20
    #include <iostream>
    #include <cstdlib>
     
    int main(int argc, char *argv[]) {
      typedef unsigned char num_t;
     
      // Extract user entry
      num_t input = 0;
      if(1 < argc) {
        input = static_cast<num_t>(::atoi(argv[1]));
      }
     
      // Display the binary rep
      size_t nb_bits = 8u*sizeof(num_t);
      for(size_t power = 0; power < nb_bits; ++power) {
        std::cout << ((input & (1 << (nb_bits - power - 1)))? "1":"0");
      }
      std::cout << std::endl;
      return 0;
    }
    L'idée est d'utiliser l'opérateur du OU binaire pour pas s'embêter. Ce programme prend un argument un entier et affiche sa représentation binaire. Tu peux ensuite d'inspirer de la manière d'extraire les bits pour atteindre le résultat que tu veux. Tu peux définir num_t avec un autre type de nombre comme int ou unsigned int.

    Note: J'utilise un typedef car je n'ai pas de compilo C++11 sous la main pour utiliser un using.
    Find me on github

  3. #3
    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 : 30
    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 209
    Points
    23 209
    Par défaut
    Bonjour,

    Déjà qu'atoi est déconseillé en C alors en C++...

    Sinon je te conseille de passer par un masque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    unsigned char mask = 0x80;
    for(size_t power = 0; power < nb_bits; ++power)
      {
        std::cout << ( input & mask ) ? "1":"0");
        input <<= 1;
        // ou mask >>= 1;
      }
    Je trouve que c'est légèrement plus clair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef unsigned char num_t;
    On peut aussi utiliser un uint8_t, ce sera légèrement plus explicite.

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Déjà qu'atoi est déconseillé en C alors en C++...
    Oui c'est vrai, c'était à l'arrache pour aller vite

    Citation Envoyé par Neckara Voir le message
    Sinon je te conseille de passer par un masque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    unsigned char mask = 0x80;
    for(size_t power = 0; power < nb_bits; ++power)
      {
        std::cout << ( input & mask ) ? "1":"0");
        input <<= 1;
        // ou mask >>= 1;
      }
    Je trouve que c'est légèrement plus clair.
    Ca revient au même mais dans ce cas n'oublie pas de calculer ton masque en fonction de la taille du type si tu veux le changer De plus, ta méthode possède l'inconvénient de modifier la donnée d'entrée, faut pas oublier de la copier si on ne veut pas l'altérer :p.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    num_t mask = 1u << (8u*sizeof(num_t)-1u);
    Find me on github

Discussions similaires

  1. conversion du décimal au binaire
    Par souzen dans le forum Débuter
    Réponses: 13
    Dernier message: 28/12/2018, 10h17
  2. Quelle est la multiplication la plus rapide? décimal ou binaire
    Par medkarim dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/10/2008, 00h27
  3. Tracer les appels aux binaires
    Par _ChToM_ dans le forum Administration système
    Réponses: 16
    Dernier message: 28/04/2008, 13h05
  4. convertion décimal to binaire
    Par grungy-soul dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 25/12/2007, 15h07
  5. Convertir un décimal en binaire
    Par rouliane dans le forum C++
    Réponses: 4
    Dernier message: 14/12/2006, 17h15

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