Bitverknüpfung



  • Hallo liebe Leute:
    mal eine Frage bezüglich Bitoperationen:

    int i_32bits=1;
    for(i_32bits = 1; i_32bits <= 32; i_32bits++)
    {
    printf("%d", ((i_input & (0x80000000)) != 0 ? 1 : 0));
    i_input= i_input << 1;

    Ich versteh die UND verknüpfung hier nicht

    ich lese eine INT zahl ein (bsp: zahl 5)
    das wäre binär 1001 und verUNDe das ganze mit 1000(0...)

    1001
    1000 ergibt für das erste BIT 1? dann 0 0 und 1 ?

    ich hab interessehalber mal die zahl ausgegeben die bei der verUNDung von i_input und 0x80000000 herauskommt und da kommt irgendein wert heraus?

    das ist mir irgendwie total unklar?
    weiters müsste in meinen Augen die Umrechnung von HEX in Binär auch mit 0xF funktionieren bzw auch mit 0x8 ? da ich ja immer nur das 1. bit vergleiche?

    Wäre dankbar für eine erklärung

    Liebe Grüße Mike



  • Hallo Mike,

    10000000 00000000 00000000 00000000 = 0x80000000

    Du testet mit der UND-Verknüpfung ob das letzte Bit vorhanden ist und gibst je nach Erfolg eine 1 oder eine 0 aus. Dieses machst du 32mal und schiebst die Bits in deiner Eingabezahl immer um eine Stelle nach links. Wenn dann ein Bit die letzte Stelle erreicht hat ist die UND-Verküpfung positiv und du gibst auch eine 1 aus ansonsten eine 0, so hast du in 32 Durchläufen alle Bits deine Zahl auf 1 getestet und kannst somit die Zahl binär darstellen.

    Erstelle dir am besten eine Tabelle mit den 32 geshifteten Werten und dem Ergebnis der UND-Verknüpfung dann wird das Prinzip viel deutlicher als ich es hier beschreiben kann.

    Gruß Chris



  • ja stimmt, ist mir klar geworden als ich heute nach hause gefahren bin !

    aber danke nochmal 🙂

    ich versuch jetzt sowas ähnliches zu programmieren bei dem ich dez => hex rechne

    lg mike


Anmelden zum Antworten