Conversión de decimal a binario sin matrices, etc.
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
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í .
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