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 gr Bytes übergeben.
    In Zeile 8 wird ein Zeiger auf ein char (= 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 in j gesetzt ist auch in dem Byte gesetzt ist, auf das p zeigt (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


Anmelden zum Antworten