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?

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top