Comment convertir du décimal au binaire en C++

Jinku Hu 12 octobre 2023
  1. Utiliser une fonction définie sur mesure pour convertir des nombres décimaux en binaire en C++
  2. Utiliser la classe std::bitset pour convertir un nombre décimal en binaire en C++
Comment convertir du décimal au 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
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Article connexe - C++ Binary