Conversión de decimal a binario sin matrices, etc.

Oct 01 2020

mi tarea es convertir números decimales a binarios, pero como somos principiantes en programación no se me permite usar matrices, funciones, etc. Solo para y si y operaciones básicas.

Mi codigo es:

#include <iostream>
int main()
{
   int n;
   int b;
   
   std::cin >> n;
   
   for (int i=n; n>0; --i) {
       
     b = n%2;
     std::cout << b;
     n = n/2;
   
   }

   return 0;
}

Funciona, pero me da el número binario en el orden incorrecto, por ejemplo, 0001 representa 4 en lugar de 1000. ¿Podría alguien ayudarme, por favor?

Respuestas

LostArrow Oct 01 2020 at 19:58

La razón por la que su bucle no imprime lo que espera es porque esencialmente funciona en reversa, es decir, imprime desde LSB (bit menos significativo) a MSB (bit más significativo). Échale un buen vistazo y explóralo tú mismo.

Entonces, ¿cuál es la solución para imprimir el número binario al revés sin las matrices de ayuda, etc.?

int main () {
    int n;
    std::cin >> n;

    // assuming integers are 32-bit
    // works for both positive and negative numbers
    for (int i = 31; i >= 0; --i) {
        if (n & (1 << i))
            std::cout << 1;
        else
            std::cout << 0;
    }

    return 0;
}

Por ejemplo @Some programmer dude, use cambios de bits y otros operadores aritméticos de bits. Obtenga más información sobre ellos aquí y aquí .

MarekR Oct 01 2020 at 21:16
    int x;
    while(std::cin >> x) {
        auto b = std::bitset<sizeof(x) * 8>{static_cast<unsigned>(x)};
        std::cout << x << ' ' << b << '\n';
    }

https://godbolt.org/z/njzTPo