Hilfe zu bitweise & und HexKonstante in C



  • Hallo

    Ich hätte eine Frage zu einem kleinen Programm.

    #include <stdio.h>
    
    char *binbin(int n);
    int main()
    {
        int input;
        printf("Geben Sie einen Wert zwischen 0 und 255 an: ");
        scanf_s("%d",&input);
        printf("%d ist binär %s\n",input,binbin(input));
        return(0);
    }
    char *binbin(int n)
    {
        static char bin[9];
        int x;
        for(x=0;x<8;x++)
        {
            bin[x] = n & 0x80 ? '1' : '0';
            n <<= 1;
        }
        bin[x] = '\0';
        return(bin);
    }
    

    In der Funktion binbin(int n); ist eine Zeile für mich leider noch nicht verständlich....
    Was wertet diese Zeile aus?

    bin[x] = n & 0x80 ? '1' : '0';
    

    Ich lese immer wieder den Satz:
    "Das bitweise UND kann verwendet werden, um eine Bitfolge zu maskieren."
    aber kann mit dem Maskieren nichts anfangen.

    Ich weiß wie der Ternäre-Operator funktioniert, aber was macht
    n und der bitweise & Operator
    0x80 soll hier 8 Bit (Zahl 128) darstellen, also
    1000 0000
    'n' stellt die Zahl 4 dar... (ums nacheinander abzuarbeiten)
    0000 0100

    Und hier geht's bei mir nicht weiter.

    Bei der & Verknüpfung müssen beide gleich sein um zu setzen....

    Die bit-Verschiebung, nach der Anweisung ist auch klar, ich komme nur nicht mit der angegebenen Zeile klar.

    Könnte mir da vielleicht jemand behilflich sein.

    Ich bedanke mich im voraus.



  • @tryn4x sagte in Hilfe zu bitweise & und HexKonstante in C:

    1000 0000
    'n' stellt die Zahl 4 dar... (ums nacheinander abzuarbeiten)
    0000 0100
    Und hier geht's bei mir nicht weiter.
    Bei der & Verknüpfung müssen beide gleich sein um zu setzen....

    Das Ergebnis dieser & Verknüpfung ist 0000 0000 (kurz 0)
    0 gilt bei boolscher Auswertung als unwahr/falsch

    Wenn n bei 1000 0000 angekommen ist, dann ist die Verknüpfung auch 1000 0000 .
    Ungleich 0 gilt als wahr/richtig.

    Bei n darf auch mehr als 1 Bit gesetzt sein.



  • Hallo.

    Ich danke dir/Ihnen für die schnelle Antwort....
    Aber ich glaube jetzt bin ich noch verwirrter.
    Ich jage das jetzt schon zum 1kte mal durch den Debugger..
    Ich gebe aber nicht auf.
    Manchmal braucht es eine weile
    Danke erstmal.
    Grüße



  • @tryn4x
    n & 0x80 ist ein Ausdruck (hier eine binäre Und-Verknüpfung)
    Ein Ausdruck liefert einen Wert und kann auch rechts von einer Zuweisung (=) stehen.

    Der Wert wird vom Trinär-Operator ausgewertet.

    Ein Vergleich (a < b) ist ein Ausdruck (gibt 0 oder 1)
    Ein Funktionsaufruf ist ein Ausdruck.

    Eine Zuweisung (a = 2*b+3) ist ein Ausdruck (gibt a)



  • Hallo

    Danke nochmals für deine Antwort.
    Aber das wusste ich alles schon (ohne überheblich klingen zu wollen).
    Aber ich glaube es verstanden zu haben.
    Ich dachte erst es wäre falsch das der Wert
    (input) n (z.B Dezimal 3) mit dem Bitweise & Operator zu verknüpfen...
    Es ist aber nicht falsch.

    Mein Problem war (so glaube ich ) die Zeile

    bin[x] = n & 0x80 ? '1' : '0';
    

    einzeln betrachtet zu haben.
    Aber im gesamten macht es Sinn. Ich hätte verstehen müssen das die Linksverschiebung
    direkt folgt.

    Ich habe jetzt zwar 2 Tage gebraucht....aber ich glaube, ich hab es wirklich.
    Auf dem Papier hat es sin gemacht...
    Im erklären bin ich leider echt nicht gut, sonst hätte ich genau erklären können wieso ich's jetzt
    verstanden hab.

    Ich danke aber für deine Zeit und Mühe.

    Viele Grüße


Anmelden zum Antworten