Conversione da decimale a binaria senza array ecc.?

Oct 01 2020

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

LostArrow Oct 01 2020 at 19:58

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 .

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