Converti decimale in binario in C++

Jinku Hu 12 ottobre 2023
  1. Usa la funzione definita personalizzata per convertire il numero decimale in binario in C++
  2. Usa la classe std::bitset per convertire il numero decimale in binario in C++
Converti decimale in binario in C++

Questo articolo introdurrà diversi metodi su come convertire i numeri decimali in rappresentazioni binarie in C++.

Usa la funzione definita personalizzata per convertire il numero decimale in binario in C++

Il metodo flessibile definisce una funzione che prende il valore int, lo converte nella corrispondente rappresentazione binaria e lo restituisce come valore stringa. In questo caso, abbiamo implementato l’algoritmo utilizzando l’operatore modulo % e il cicli while, dove diminuiamo il valore dell’intero della metà a ogni iterazione.

#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;
}

Produzione:

decimal: 15
binary : 1111

Usa la classe std::bitset per convertire il numero decimale in binario in C++

In alternativa, possiamo usare direttamente la classe bitset dalla libreria STL. bitset rappresenta una sequenza di dimensioni fisse di N bit e offre più metodi incorporati per manipolare i dati binari in modo efficiente. L’esempio seguente mostra la costruzione dell’oggetto bitset passando il valore stringa e un valore 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;
}

Produzione:

binary:  00000000000000000000000000001111
binary:  00000000000000000000000000001111

Si noti che abbiamo specificato 32 bit da allocare durante la dichiarazione bitset nel codice precedente. Possiamo specificare un numero diverso di bit per soddisfare meglio le loro esigenze. Più scenari sono illustrati nel seguente segmento di codice:

#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;
}

Produzione:

binary:  00000000000000000000000000001111
binary:  0000000000001111
binary:  00001111
binary:  01111

La classe bitset ha diversi metodi utili per operare sul suo contenuto. Questi metodi possono essere impiegati per invertire tutti i bit del set (funzione flip) o per reset/set i bit specificati nella sequenza. Sono supportate anche le operazioni binarie principali come AND, OR, XOR, NOT e SHIFT. Ne mostriamo un paio nell’esempio sotto, ma puoi vedere il manuale completo della classe bitset qui.

#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;
}

Produzione:

binary : 00000000000000000000000000001111
flipped: 11111111111111111111111111110000
shift>4: 00000011111111111111111111111111
shift<5: 00001111111111111111111111111100
reset  : 00000000000000000000000000000000
set    : 00000000000000010000000000000000
Autore: 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

Articolo correlato - C++ Binary