Maska - wyświetlanie liczby binarnej

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?

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
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;
} 

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