Eu escrevi um programa 'simples' (demorei 30 minutos) que converte o número decimal para binário. Tenho a certeza que há um 'é muito mais simples, por isso podem mostrar-me? Aqui'é o código:
#include <iostream>
#include <stdlib.h>
using namespace std;
int a1, a2, remainder;
int tab = 0;
int maxtab = 0;
int table[0];
int main()
{
system("clear");
cout << "Enter a decimal number: ";
cin >> a1;
a2 = a1; //we need our number for later on so we save it in another variable
while (a1!=0) //dividing by two until we hit 0
{
remainder = a1%2; //getting a remainder - decimal number(1 or 0)
a1 = a1/2; //dividing our number by two
maxtab++; //+1 to max elements of the table
}
maxtab--; //-1 to max elements of the table (when dividing finishes it adds 1 additional elemnt that we don't want and it's equal to 0)
a1 = a2; //we must do calculations one more time so we're gatting back our original number
table[0] = table[maxtab]; //we set the number of elements in our table to maxtab (we don't get 10's of 0's)
while (a1!=0) //same calculations 2nd time but adding every 1 or 0 (remainder) to separate element in table
{
remainder = a1%2; //getting a remainder
a1 = a1/2; //dividing by 2
table[tab] = remainder; //adding 0 or 1 to an element
tab++; //tab (element count) increases by 1 so next remainder is saved in another element
}
tab--; //same as with maxtab--
cout << "Your binary number: ";
while (tab>=0) //until we get to the 0 (1st) element of the table
{
cout << table[tab] << " "; //write the value of an element (0 or 1)
tab--; //decreasing by 1 so we show 0's and 1's FROM THE BACK (correct way)
}
cout << endl;
return 0;
}
A propósito, é complicado's mas eu tentei o meu melhor.
edit - Aqui está a solução que acabei por usar:
std::string toBinary(int n)
{
std::string r;
while(n!=0) {r=(n%2==0 ?"0":"1")+r; n/=2;}
return r;
}
std::bitset
tem um método .to_string()
que retorna um std::string
contendo uma representação de texto em binário, com preenchimento de leading-zero.
Escolha a largura do bitset conforme necessário para os seus dados, por exemplo std::bitset<32>
para obter cordas de 32 caracteres a partir de inteiros de 32 bits.
#include <iostream>
#include <bitset>
int main()
{
std::string binary = std::bitset<8>(128).to_string(); //to binary
std::cout<<binary<<"\n";
unsigned long decimal = std::bitset<8>(binary).to_ulong();
std::cout<<decimal<<"\n";
return 0;
}
EDIT: Por favor não edite minha resposta para Octal e Hexadecimal. O OP pediu especificamente de Decimal para Binário.
Uma variável int
não está em decimal, ela's em binário. O que você're procura é uma representação de string binária do número, que você pode obter aplicando uma máscara que filtra os bits individuais, e depois imprimi-los:
for( int i = sizeof(value)*CHAR_BIT-1; i>=0; --i)
cout << value & (1 << i) ? '1' : '0';
Essa's é a solução se a sua pergunta for algorítmica. Se não, você deve usar a classe std::bitset para lidar com isso para você:
bitset< sizeof(value)*CHAR_BIT > bits( value );
cout << bits.to_string();