Comment convertir du décimal au binaire en C++
- Utiliser une fonction définie sur mesure pour convertir des nombres décimaux en binaire en C++
-
Utiliser la classe
std::bitset
pour convertir un nombre décimal en binaire en C++
Cet article présente plusieurs méthodes de conversion des nombres décimaux en représentation binaire en C++.
Utiliser une fonction définie sur mesure pour convertir des nombres décimaux en binaire en C++
La méthode flexible définit une fonction qui prend la valeur int
, la convertit en représentation binaire correspondante, et la retourne sous forme de valeur de chaîne. Dans ce cas, nous avons implémenté l’algorithme en utilisant l’opérateur modulo %
et la boucle while
, où nous diminuons la valeur de l’entier de la moitié à chaque itération.
#include <iostream>
using std::cout;
using std::endl;
using std::string;
string toBinary(int n) {
string r;
while (n != 0) {
r += (n % 2 == 0 ? "0" : "1");
n /= 2;
}
return r;
}
int main() {
int number = 15;
cout << "decimal: " << number << endl;
cout << "binary : " << toBinary(number) << endl;
return EXIT_SUCCESS;
}
Production:
decimal: 15
binary : 1111
Utiliser la classe std::bitset
pour convertir un nombre décimal en binaire en C++
On peut aussi utiliser directement la classe bitset
de la bibliothèque STL. Le bitset
représente une séquence de N bits de taille fixe, et il offre de multiples méthodes intégrées pour manipuler efficacement les données binaires. L’exemple suivant montre la construction de l’objet bitset
en passant la valeur string
et une valeur int
.
#include <bitset>
#include <iostream>
using std::bitset;
using std::cout;
using std::endl;
using std::string;
string toBinary(int n) {
string r;
while (n != 0) {
r += (n % 2 == 0 ? "0" : "1");
n /= 2;
}
return r;
}
int main() {
int number = 15;
bitset<32> bs1(toBinary(number));
cout << "binary: " << bs1 << endl;
bitset<32> bs2(number);
cout << "binary: " << bs2 << endl;
return EXIT_SUCCESS;
}
Production:
binary: 00000000000000000000000000001111
binary: 00000000000000000000000000001111
Notez que nous avons spécifié 32 bits à allouer lors de la déclaration du bitset
dans le code précédent. On peut spécifier un nombre de bits différent pour mieux répondre à ses besoins. Plusieurs scénarios sont présentés dans le segment de code suivant:
#include <bitset>
#include <iostream>
using std::bitset;
using std::cout;
using std::endl;
using std::string;
int main() {
int number = 15;
bitset<32> bs1(number);
cout << "binary: " << bs1 << endl;
bitset<16> bs2(number);
cout << "binary: " << bs2 << endl;
bitset<8> bs3(number);
cout << "binary: " << bs3 << endl;
bitset<5> bs4(number);
cout << "binary: " << bs4 << endl;
cout << endl;
return EXIT_SUCCESS;
}
Production:
binary: 00000000000000000000000000001111
binary: 0000000000001111
binary: 00001111
binary: 01111
La classe bitset
a plusieurs méthodes utiles pour opérer sur son contenu. Ces méthodes peuvent être utilisées pour inverser tous les bits de l’ensemble (fonction flip
) ou pour reset
/set
les bits spécifiés dans la séquence. Les opérations binaires de base comme AND
, OR
, XOR
, NOT
et SHIFT
sont également supportées. Nous en montrons quelques unes dans l’exemple ci-dessous, mais vous pouvez consulter le manuel complet de la classe bitset
ici.
#include <bitset>
#include <iostream>
using std::bitset;
using std::cout;
using std::endl;
using std::string;
int main() {
int number = 15;
bitset<32> bs(number);
cout << "binary : " << bs << endl;
cout << "flipped: " << bs.flip() << endl;
cout << "shift>4: " << (bs >>= 6) << endl;
cout << "shift<5: " << (bs << 2) << endl;
cout << "reset : " << bs.reset() << endl;
cout << "set : " << bs.set(16) << endl;
return EXIT_SUCCESS;
}
Production:
binary : 00000000000000000000000000001111
flipped: 11111111111111111111111111110000
shift>4: 00000011111111111111111111111111
shift<5: 00001111111111111111111111111100
reset : 00000000000000000000000000000000
set : 00000000000000010000000000000000
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook