Zamiana liczby z systemu dziesiętnego na dwójkowy

0

Muszę zamienic liczbe z systemu dziesietnego na dwójkowy. Wszystko chyba działa tyle że wypisuje mi tę liczbę od tyłu
Jak zrobic aby wypisywało od przodu?

 #include <iostream>
 #include<stdlib.h>
 using namespace std;
 int main()

 {
  int n;
  cin>>n;

while (n!=0)
{
  cout<<(n%2);
  n=n/2;
}
}
1

Na przykład zapisuj do tablicy a potem przeiteruj po tablicy od tyłu.

1
    int number {58861};
    bool start {false};

    for( int i { sizeof(int)*8-1 } ; i>=0 ; --i )
    {
        cout << ( ( number & (1 << i) ) ? [&start](){ start=true;return "1"s; }() : ( start ? "0"s:""s ) );
    }
    cout << endl;
1
void wypisz(int n) {
    if (n > 0) {
        wypisz(n/2);
        std::cout << n%2;
    }
}
2

Albo:

  1. Zamień na binarne
  2. Odwróć

Albo:

  1. Zdejmuj bity od MSB a nie od LSB

To drugie jest o tyle trudniejsze że wymaga znalezienia takiej liczby k że 2^k > n i potem możesz zdejmować bity przez bitowy AND z maską 1 << k-1, 1 << k-2 itd aż do 0

0
polka123 napisał(a):

Muszę zamienic liczbe z systemu dziesietnego na dwójkowy. Wszystko chyba działa tyle że wypisuje mi tę liczbę od tyłu

Jak zrobic aby wypisywało od przodu?

  1. Zapisuj tą liczbę do tablicy w takiej postaci jak jest
  2. Potem tą tablicę przepisz do innej tablicy odwracając ją (wystarczy zamienić indeksy w pętli - zaczynasz od tablicy która jest od tyłu podając w pętli indeks zerowy, a przepisanie do drugiej tablicy polega na tym, że zaczynasz od ostatniego indeksu drugiej tablicy)

możesz to zrobić w dwóch pętlach ale ja wolałem to zrobić w jednej pętli podając więcej warunków

for(int j=0, i=rozm_tab-1; j<rozm_tab; j++, i--)
{
      tabPOM[j]=tab[i];
}
2

Albo można użyć biblioteki z cpp

    std::string bit_string = "110010";
    std::bitset<8> b3(bit_string);
0

chyba, że ... ? :D

#include <iostream>

int main(void)
{
    int wyn, bin, rozm_tab, ile_bitow, przesuniecie;

    std::cin >> bin;

    for(int i=bin, j=1; i>=1; i=i/2, j++)
    {
        rozm_tab=j;
    }

    int *tab = new int [rozm_tab];
    int *tabPOM = new int [rozm_tab];

    for(int i=bin, j=0; i>=1; i=i/2, j++)
    {
        if(i % 2 == 0)
        {
            wyn = i % 2;
        }
        else if(i % 2 == 1)
        {
            wyn = i % 2;
        }
        tab[j]=wyn;
    }

    for(int j=0, i=rozm_tab-1; j<rozm_tab; j++, i--)
    {
        tabPOM[j]=tab[i];
    }

    std::cout << bin << " -> ";

    ile_bitow = rozm_tab;

    if(rozm_tab % 4 == 0)
    {
        ile_bitow = (ile_bitow + 0);
        przesuniecie = 0;
    }
    else if(rozm_tab % 4 == 1)
    {
        std::cout << "000";
        ile_bitow = (ile_bitow + 3);
        przesuniecie = 3;
    }
    else if(rozm_tab % 4 == 2)
    {
        std::cout << "00";
        ile_bitow = (ile_bitow + 2);
        przesuniecie = 2;
    }
    else if(rozm_tab % 4 == 3)
    {
        std::cout << "0";
        ile_bitow = (ile_bitow + 1);
        przesuniecie = 1;
    }

    for(int i=0, j=1; i<rozm_tab; i++, j++)
    {
        tab[i]=tabPOM[i];
        std::cout << tab[i];

        if((j+przesuniecie) % 4 == 0)
        {
            std::cout << " ";
        }
    }

    std::cout << " = (" << rozm_tab << ") bitow << std::endl;
    std::cout << std::endl;
    std::cout << "razem (" << ile_bitow << ") bitow" << std::endl;

    delete [] tab;
    delete [] tabPOM;

    std::cout << std::endl;

    return 0;
}

1

To już kolejny temat dotyczący tego samego problemu:

Za każdym razem dostajesz sensowną odpowiedź - użyj std::bitset zamiast wymyślać koło na nowo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1