Conversione da decimale a binaria senza array ecc.?
il mio compito è convertire i numeri decimali in binari, ma poiché siamo principianti nella programmazione non mi è permesso usare array, funzioni, ecc. Solo per e se e operazioni di base.
Il mio codice è:
#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;
}
Funziona, ma mi dà il numero binario nell'ordine sbagliato, ad esempio è 0001 che rappresenta 4 invece di 1000. Qualcuno potrebbe aiutarmi per favore?
Risposte
Il motivo per cui il tuo ciclo non stampa ciò che ti aspetti è perché essenzialmente funziona al contrario, cioè stampa da LSB (bit meno significativo) a MSB (bit più significativo). Dai una buona occhiata ed esploralo tu stesso.
Allora, qual è la soluzione per stampare il binario di numero al contrario senza gli array di aiuto, ecc.?
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;
}
Ad esempio @Some programmer dude, usa spostamenti di bit e altri operatori aritmetici di bit. Scopri di più su di loro qui e qui .
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