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++/CLI Discussion :

Incrémenter en binaire.


Sujet :

C++/CLI

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 37
    Points
    37
    Par défaut Incrémenter en binaire.
    Bonjour,

    J'ai un problème, car je voudrais incrémenter du binaire.
    Je ne sais pas comment faire.

    Un petit exemple :

    0000
    0001
    0010
    0011
    0100
    0101
    0110
    0111
    1000



    Si quelqu'un pourrait m'aider, s'il vous plaît.

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    il manque quelques précisions à ta question.

    Est-ce que, par exemple, "0110" est un nombre ou une chaine de caractères représentant un nombre ? Utilises-tu un type "standard" pour stocker tes valeurs (int, short double, etc.) ? Peux-tu avoir des nombres binaires négatifs ?

    Utilises-tu déjà un type binaire que tu aurais implémenter ? Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Bin_t var = 110; // 6 en base 10 
    var++; // 111 base 2
    var += 10; // 111(2) + 10(2) = 1001(2)  = 9(10)
    Quoi qu'il en soit, le processeur que tu utilises traite déjà les données en binaire et ce que tu affiches ensuite - via std::cout ou printf() par exemple - n'est qu'une représentation, parmi de multiples, d'une valeur interne. In fine, +1 binaire, c'est aussi +1 en décimal, en hexa, en octal, etc.

    Explique-nous quels sont les types que tu utilises et ce que tu souhaites faire exactement. Met un bout de code (même si ça ne compile pas) ou un algorithme décrivant ce que tu cherches à faire.

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Incrémenter est une opération qui ne dépend pas de la base utilisée. La base est avant tout une caractéristique de l'affichage, pas d'un nombre (du moins pour les entiers, pour les flottants, elle joue sur le mode d'arrondi).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 37
    Points
    37
    Par défaut
    Je réalise un programme d’adressage IP.

    Voici mes étapes :
    Les nombres sont saisie en chaîne de caractères avec un point entre les nombres.

    Premier Menu :
    - choix 1 (correspond à saisir une adresse ip et un masque de sous-réseau) ou 2 (correspond à saisir une adresse ip et un cidr) le cidr est un nombre en int.

    Deuxième Menu :
    ensuite pour créer son adressage l'utilisateur saisir le nombre de sous-réseaux en choix 1 ou le nombre de machines en choix 2.

    Je n'ai aucun nombre négatif ils sont toujours positif.

    J'utilise le type standard pour stocker mes valeurs.

    Je n'ai jamais utilisé le type binaire.

    Citation Envoyé par Neitsa Voir le message
    Bonjour,

    il manque quelques précisions à ta question.

    Est-ce que, par exemple, "0110" est un nombre ou une chaine de caractères représentant un nombre ? Utilises-tu un type "standard" pour stocker tes valeurs (int, short double, etc.) ? Peux-tu avoir des nombres binaires négatifs ?

    Utilises-tu déjà un type binaire que tu aurais implémenter ? Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Bin_t var = 110; // 6 en base 10 
    var++; // 111 base 2
    var += 10; // 111(2) + 10(2) = 1001(2)  = 9(10)
    Quoi qu'il en soit, le processeur que tu utilises traite déjà les données en binaire et ce que tu affiches ensuite - via std::cout ou printf() par exemple - n'est qu'une représentation, parmi de multiples, d'une valeur interne. In fine, +1 binaire, c'est aussi +1 en décimal, en hexa, en octal, etc.

    Explique-nous quels sont les types que tu utilises et ce que tu souhaites faire exactement. Met un bout de code (même si ça ne compile pas) ou un algorithme décrivant ce que tu cherches à faire.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    Désolé pour cette réponse tardive, j'ai dû pas mal médité sur ce problème.

    J'ai faire une simulation à côté mais ça ne marche pas.

    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
    using namespace std;
    #include <iostream>
    int main()
    {
        string tab[4]={"0","0","0","0"};
        int j,i;
        for(j=3;j>-1;j--)
        {
                        cout<<"Indice tableau :"<<j<<endl;
                        for(i=0;i<256;i++)
                        {
                                          cout<<"Indice incrementation :"<<i<<endl;
                                          if(tab[j]=="0"&&tab[j-1]=="0")
                                          {
                                                                        tab[j]="1";
                                                                        cout<<tab[j]<<endl;
     
                                          }
                                          if(tab[j]=="1"&&tab[j-1]=="0")
                                          {
                                                              tab[j]="0";
                                                              tab[j-1]="1";
                                                              cout<<tab[j]<<endl;
                                                              cout<<tab[j-1]<<endl;
     
                                          }
                                          if(tab[j]=="1"&&tab[j-1]=="1")
                                          {
                                                                        tab[j]="0";
                                                                        tab[j-1]="0";
                                                                        tab[j-2]="1";
                                                                        cout<<tab[j]<<endl;
                                                                        cout<<tab[j-1]<<endl;
                                                                        cout<<tab[j-2]<<endl;
     
                                          }
                        }
                        cout<<tab[j]<<endl;
        }
    system("pause");
    }
    Si ça aide quelqu'un à comprendre.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 37
    Points
    37
    Par défaut
    J'ai effectué des modifications sur mon code en utilisant un tableau multidimensionnel, se sera déjà un peu plus simple.

    voir le code ci-dessous :

    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
    using namespace std;
    #include <iostream>
    int main()
    {
        string tab[4][4];
        int k,m,i,j;
        for(k=0;k<2;k++)
        {
           for(m=0;m<4;m++)
           {
                  if(tab[k][m]=="")
                  {
                        tab[k][m]="0";//initialisation du taleau à 0
                  }
                  cout<<"le ligne"<<k<<endl;
                  cout<<"colonne"<<m<<endl;
                  cout<<tab[k][m]<<endl;;
           }
        }
        for(j=3;j>-1;j--)
        {
                   cout<<"colonne incremente :"<<j<<endl;
                   for(i=0;i<4;i++)
                   {
                         cout<<"ligne incremente :"<<i<<endl;
                         if(tab[i][j]=="0"&&tab[i][j-1]=="0")//si on trouve un 0 au premier et au deuxième indice.
                         {
                                tab[i][j]="1";//alors on met un 1
                                cout<<tab[i][j]<<endl;
                                tab[i+1][j]=tab[i][j];//On copie la valeur dans la ligne suivante
                                i++;//on passe à la ligne suivante
     
                         }
                         if(tab[i][j]=="1"&&tab[i][j-1]=="0")//si on trouve un 1 au premier et un 0 au deuxième indice.
                         {
                                tab[i][j]="0";//on mets un 0 au premier indice
                                tab[i][j-1]="1";//ensuite on mets un 1 à l'indice suivante.
                                cout<<tab[i][j]<<endl;
                                cout<<tab[i][j-1]<<endl;
                                tab[i+1][j]=tab[i][j];//On copie les valeurs dans la ligne suivante
                                tab[i+1][j-1]=tab[i][j-1];
                                i++;
     
                         }
                         if(tab[i][j]=="1"&&tab[i][j-1]=="1")//si on trouve un 1 au premier et un 1 au deuxième indice.
                         {
                                tab[i][j]="0";//on mets un 0 au premier indice
                                tab[i][j-1]="0";//on mets un 0 au deuxième indice
                                tab[i][j-2]="1";//ensuite on mets un 1 à l'indice suivante.
                                cout<<tab[i][j]<<endl;
                                cout<<tab[i][j-1]<<endl;
                                cout<<tab[i][j-2]<<endl;
                                tab[i+1][j]=tab[i][j];
                                tab[i+1][j-1]=tab[i][j-1];
                                tab[i+1][j-2]=tab[i][j-2];
                                i++;
     
                         }
                   }
                   cout<<tab[i][j]<<endl;
        }
    system("pause");
    }
    Mon code ne fonctionne pas.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 15
    Points : 23
    Points
    23
    Par défaut
    Si je lis bien ton code, il me semble que tu réinventes la calculatrice binaire, alors que si tu utilises des types numériques et non des chaînes de caractères tu te simplifieras la vie.

    Une adresse IP (v4) est écrite sur 32 bits, tu peux donc la représenter avec un type unsigned int sur la plupart des compilateurs ou avec un tableau de 4 unsigned char. Tu pourras alors utiliser les opérateurs habituels pour effectuer des opérations arithmétiques ou binaires. Tu peux également utiliser un bitset<32>.

    Pour visualiser tes nombres tu peux procéder en effectuant une boucle de décalages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void disp_bin(unsigned char nb){
            for(unsigned short i=0; i<8; i++){
                    if((nb << i & 128) != 0)
                            cout<< "1";
                    else 
                            cout<<"0";      
            }
            cout<<"\n";
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Incrémenter un chiffre binaire
    Par condor666 dans le forum Débuter
    Réponses: 2
    Dernier message: 24/07/2013, 11h54
  2. Réponses: 7
    Dernier message: 29/05/2012, 16h16
  3. Incrémenter de 1 à 8 en binaire
    Par somaa dans le forum Général Java
    Réponses: 2
    Dernier message: 12/06/2010, 17h37
  4. Post incrémentation?
    Par Defrag dans le forum C
    Réponses: 4
    Dernier message: 08/10/2002, 10h36
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

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