Converti decimale in binario in C++
- Usa la funzione definita personalizzata per convertire il numero decimale in binario in C++
-
Usa la classe
std::bitset
per convertire il numero 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
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