Bit-Manipulation

  • Hallo,

    vielen Dank erstmal für die Hilfe. Es funktioniert soweit. Leider verstehe ich nicht, wie man von der Position des Bits zur Hex-Darstellung kommt. Welche Hex-Zahl steht hinter dem zweiten, dritten,... Bit?

  • Ein Integer hat 32 Bit.

    z.B.:

    11110000111100001111000011110000
    Das wär Binär. In Hex kannst immer vier binärziffern zusammenziehen zu einer Hexadezimalziffer:
    F0F0F0F0
    das 0x heißt nur, dass es Hexadezimal ist. Wennst jetzt oben schaust:
    0x7FFFFFFF = 7FFFFFFF
    7 = 0111
    F = 1111

    => 7FFFFFFF = 0111 1111 1111 1111 1111 1111 1111 1111

    Das ist die Maske. Wenn du jetzt deine Zahl bitweise mit der Zahl verUNDest, dann hast:

    0111 1111 1111 1111 1111 1111 1111 1111 &
    1111 0000 1111 0000 1111 0000 1111 0000 =
    -----------------------------------------------------
    0111 0000 1111 0000 1111 0000 1111 0000

    Somit hast das MSB gelöscht.. alles klar?

    640K ought to be enough for anybody. :eek2:

  • Eine Hex besteht aus 4 Bit ... demnach sind 2 Hexzahlen 8 bit lang.
    Int als Datentyp ist zumeist 32 bit lang. Logischerweise werden daher 8 Hexzahlen benötigt. Hoffe das ist soweit verständlich genug, dass du dir den letzten Reim noch selbst bilden kannst :winking_face:

  • Zitat von wood

    Leider verstehe ich nicht, wie man von der Position des Bits zur Hex-Darstellung kommt. Welche Hex-Zahl steht hinter dem zweiten, dritten,... Bit?


    Man braucht auch nicht wirklich die Hexdarstellung, mit Hilfe von left shifts kommt man auch zum gewünschten Ergebnis:

    1 << 0 = 1 = 0x1
    1 << 1 = 2 = 0x2
    1 << 2 = 4 = 0x4
    1 << 3 = 8 = 0x8
    1 << 4 = 16 = 0x10
    1 << 5 = 32 = 0x20
    usw.

    Setzen des 6. bits wär also x |= (1 << 6);
    Löschen des 6. bits: x &= ~(1 << 6);
    da man mit Hilfe von ~ die einzelnen bits negiert.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!