Como armazenar números binários maiores em bitset (C ++)
Pergunta
Estou tentando fazer um programa para converter um número em seu binário.
Código:
#include<iostream>
#include<algorithm>
#include<bitset>
using namespace std;
int main()
{
int a;
string k;
bitset<CHAR_BIT> n;
cin>>a;
n=bitset<CHAR_BIT>(a);
cout<<n<<" ";
return 0;
}
O programa fornece uma resposta errada para 585, pois contém mais de 6 dígitos binários. Como posso números tão maiores?
Solução
Um bitset tem um número fixo de bits. Você especifica bitset<CHAR_BIT>
-Na maioria dos sistemas, o char_bit é 8, então você terá um bitset de 8 bits. Quando você tenta encher um número maior no bitset, os bits mais significativos são descartados.
Se você conhece com antecedência os maiores números com os quais terá que lidar, pode especificar por exemplo bitset<16>
ou bitset<32>
. Se não o fizer, você pode ter que usar algum outro tipo de dados.
Outras dicas
585 mod 256 = 73 (assumindo que char_bit é 8)
73 na base 2 = 0b01001001
O programa imprime 01001001.
Não vejo que há nada errado.
Se você quiser armazenar toda a gama de a
, o bitset deve ser declarado como
bitset<CHAR_BIT * sizeof(a)> n (a);