worst_case: Bit abfragen/setzen/löschen

Hi,

vielleicht schon mal gefragt, leider nichts gefunden, wie kann ich aus z.B. einem Integerwert ein einzelnes Bit abfragen/setzen/löschen

Danke
     worst_case

  1. hi!

    vielleicht schon mal gefragt, leider nichts gefunden, wie kann ich
    aus z.B. einem Integerwert ein einzelnes Bit abfragen/setzen/
    löschen

    Zuerst musst du wissen, welche Werte die einzelnen Bits haben. Das
    niederwertigste Bit hat den Wert 1, das nächste den Wert 2, dann den
    Wert 4, und so weiter. Das i-te Bit hat also den Wert 2^(i-1).

    Dann gibt es bitweise logische Verknüpfungen, die du anwenden kannst.
    Das sind & (AND), | (OR) und ^ (XOR). Du musst dir überlegen, wie du
    mit diesen Operatoren die Werte abfragen und verändern kannst.

    Mal ein paar Beispielrechnungen:

    10101010    10101010
    & 00001000  & 00000100
    ----------  ----------
      00001000    00000000

    Damit kannst du also ein Bit abfragen. Du ver-UND-est die Zahl, die
    überprüft werden soll mit einer Zahl, in der nur das abzufragende
    Bit gesetzt ist. Wenn 0 herauskommt, war das Bit nicht gesetzt, sonst
    schon.

    10101010    10101010
    | 00001000  | 00000100
    ----------  ----------
      10101010    10101110

    Damit kannst du ein bestimmtes Bit setzen. Ist das entsprechende
    Bit schon gesetzt, dann bleibt es auch erhalten.

    10101010    10101010
    ^ 00001000  ^ 00000100
    ----------  ----------
      10100010    10101110

    So kannst du ein Bit umkippen: ist das Bit gesetzt, dann wird es
    gelöscht, ansonsten wird es gesetzt. Das ist dann auch eine Methode,
    um ein gesetztes Bit zu löschen, nämlich indem du vorher überprüfst,
    ob es gesetzt ist, und dann mit einer XOR-Operation umkehrst.

    bye, Frank!

    --
    Never argue with an idiot. He will lower you to his level and then
    beat you with experience.
    1. Hallo Frank,

      Das ist dann auch eine Methode, um ein gesetztes Bit zu
      löschen, nämlich indem du vorher überprüfst, ob es gesetzt
      ist, und dann mit einer XOR-Operation umkehrst.

      Tatsaechlich wird das meist anders gemacht:

      bitmask = bitmask & ~bit

      Es wird also das unaere Komplement erstellt und dann per AND
      verknuepft. Beispiel-Rechnung:

      ~ 00001000  ~ 00000100
      ----------  ----------
        11110111    11111011

      10101010    10101010
      & 11110111  & 11111011
      ----------  ----------
        10100010    10101110

      Gruesse,
       CK

      1. hi!

        Das ist dann auch eine Methode, um ein gesetztes Bit zu
        löschen, nämlich indem du vorher überprüfst, ob es gesetzt
        ist, und dann mit einer XOR-Operation umkehrst.
        Tatsaechlich wird das meist anders gemacht:
        bitmask = bitmask & ~bit

        Das ist in der Tat besser, aber ich hatte keine Lust, darüber nach-
        zudenken, wie man das alternativ machen kann... ;)

        bye, Frank!

        --
        Never argue with an idiot. He will lower you to his level and then
        beat you with experience.