Maska - wyświetlanie liczby binarnej

2017-01-14 00:44

Rejestracja: 5 lat temu

Ostatnio: 3 lata temu

0

Witam
Starałem się znaleźć temat, który zawierałby potrzebne mi informacje, ale znajdowałem jedynie te z maskami IP.

Mam za zadanie napisać program, który wyświetli liczbę binarną, a do tego mam skorzystać z maski.
Napisałem coś takiego, ale konsola wywala mi 0000 0000 0000 0000 0000 0000 0000 0000

 #include <iostream>

using namespace std;

int maska(int b){
    unsigned int mask = 0x80000000;
    for(int i=1; i<=32; i++){
        if(b&mask)cout << "1";
        else cout << "0";

        if(i%4==0)cout << " ";

    }
}

int main()
{
    int a;
    cout << "Wczytaj liczbe"<<endl;
    cin >> a;
    maska(a);

    return 0;
}

W pętli for, w pierwszym ifie warunek jest taki, że jeśli a&maska = true, to wywołaj '1', tak? Jeśli dobrze rozumiem.
Długo już nad tym siedzę i nie mogę znaleźć błędu (pewnie będzie głupi).
Jest ktoś w stanie pomóc?

edytowany 1x, ostatnio: furious programming, 2017-01-14 01:47

Pozostało 580 znaków

2017-01-14 01:06

Rejestracja: 7 lat temu

Ostatnio: 10 godzin temu

2
#include <iostream>
#include <string>
#include <bitset>
using namespace std;

string bin(unsigned num) {
    string result = bitset<sizeof(unsigned)*8>{num}.to_string();
    for(auto i = 0u; i < result.size(); i += 5) {
        result.insert(result.size()-i, " ");
    }
    return result;
}

int main() {
    cout << bin(0b101101);
    return 0;
}

https://ideone.com/MiKV99

0000 0000 0000 0000 0000 0000 0010 1101 

ps. co do 0b101101 - binarne literały są od C++14. Jeśli używasz starszego standardu, to nie dziw się że nie łyknie ;P
pss. mam nadzieję, że białe znaki na końcu wyniku bin Ci nie przeszkadzają.

Co do twojego kodu:

  • twoja maska powinna wynosić 1, a wynosi jakąś skrajnie dużą liczbę
  • w obiegu każdej pętli jej ciało (poza nieużywanym i przy czymkolwiek innym jak przerwach) operuje na dokładnie tych samych wartościach - skoro zarówno b jak i maska się nie zmieniają, to dziwnie byłoby wymagać różnych wyników ;P
edytowany 3x, ostatnio: spartanPAGE, 2017-01-14 01:53
@spartanPAGE: chyba wyświetliłeś odwrócone. - Mokrowski 2017-01-14 01:46
@Mokrowski: po prostu przygotowałem obraz pod osobę z diplopią; - spartanPAGE 2017-01-14 01:57

Pozostało 580 znaków

2017-01-14 01:45

Rejestracja: 5 lat temu

Ostatnio: 3 minuty temu

Lokalizacja: Tam gdzie jest (centy)metro...

2

Gdyby młodsze bity miały być z prawej to...

#include <iostream>
#include <string>

using namespace std;

string bin(unsigned num) {
    string result;
    int bits = sizeof(num) * 8;
    while(bits--) {
        result += (num & (1 << bits)) ? '1' : '0';
        if(not (bits % 4)) result += ' ';
    }
    return result;
}

int main() {
    cout << bin(0b101101) << endl;
} 

Każdy problem w informatyce można rozwiązać, dodając kolejny poziom pośredniości,z wyjątkiem problemu zbyt dużej liczby warstw pośredniości — David J. Wheeler

Pozostało 580 znaków

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