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.
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.
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:
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.
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)
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.
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.
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.
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 :
Si ça aide quelqu'un à comprendre.
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"); }
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 :
Mon code ne fonctionne pas.
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"); }
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"; }
Partager