Ausgabe von Bitmustern
-
Hay
programmiere erst seit kurzem C++ und hab ne frage zu nem Code. Das Buch aus dem ich lern, erklärt diesen leider nich =/.using namespace std; void anzeige(void* n, int gr) //klar { char* p; //char pointer p...wg 1 byte int i,j; p = (char*)n; //Ab hier..(einschließlich der Zeile) p+=gr-1; //versteh ichs nich for(i = 1; i<=gr; i++) //was die forschliefe macht.. is klar.. aber warum? { for(j = 128; j>=1; j/=2) // hier das gleiche.. warum? { if(j & *p) // verstehe die Bedingung nicht: j verknüpfe *p? cout << "1"; else cout << "0"; } p--; //zwar klar.. aber wie immer.. warum? cout << " "; } }Die zu übergebenden Parameter werden dann von main übergeben..
Aber ich versteh beim besten Willen nich was in void anzeige() abläuft..
Hoffe jemand kann mir das erklären.Mfg
-
Es wird ein Zeiger auf einen Speicherbereich von
grBytes übergeben.
In Zeile 8 wird ein Zeiger auf einchar(= 1 byte) geholt und zwar auf das letzte vom übergebenen Speicherbereich (zeile 9).
Die erste Schleife iteriert dann byteweise über den Speicherbereich (Zeile 20 geht zum nächst höheren Byte).
Die zweite Schleife macht nichts weiter als einzelne Bits zu prüfen:
128 ist nur das msb gesetzt, teilen durch zwei wandert das bit weiter, bis zum LSB.
Zeile 15 prüft ob das jeweilige Bit, dass injgesetzt ist auch in dem Byte gesetzt ist, auf daspzeigt (daher*p).Damit lassen sich Zahlen bitweise ausgeben. Zumindest auf Little-Endian Systemen (was aber wohl für viele zutreffen dürfte...)
-
jetzt wirds klar

danke für die schnelle antwort