Rolf B: Bitweiser NOT-Operator enttäuscht meine Erwartung

Beitrag lesen

Hallo Buchhalter,

die konkrete Wortlänge musst Du aber schon kennen. Denn wie willst Du im Programm sonst wissen, ob 0b1101 oder 0b001101 zu invertieren ist. Aus Sicht von JavaScript ist das beides die Zahl 13, das Literal ist zur Laufzeit in seiner Textform nicht bekannt.

Wenn Du deine Wortlänge auf bspw. 6 festlegst, bekommst Du die Maske dadurch, dass Du die 1 um 6 Bits nach links verschiebst, also von 0b1 nach 0b1000000 gehst, und dann 1 abziehst, das ergibt 0b111111. Zum Linksverschieben verwendet man den << Operator.

Wenn Du die Maske hast, brauchst Du keinen NOT-Operator mehr, sondern machst direkt einen XOR, der ^ Operator. In a ^ maske werden alle die Bits von a geflippt, wo die Maske ein 1-Bit hat.

function flipBits(value, length) {
  return value ^ ((1 << length) - 1);
}

Das Minus hat höhrere Prio als ^, deswegen muss ( 1<<length)-1 nicht geklammert werden. Ich hab's trotzdem gemacht, um Unklarheiten zu vermeiden. Es hat aber auch höhere Prio als <<, deswegen müssen dort die Klammern hin.

Rolf

--
sumpsi - posui - obstruxi
0 60

Bitweiser NOT-Operator enttäuscht meine Erwartung

Der Buchhalter
  • javascript
  1. 2
    Gunnar Bittersmann
    1. 0
      Der Buchhalter
      1. 0
        Gunnar Bittersmann
        1. 0
          Der Buchhalter
          1. 0
            Gunnar Bittersmann
            1. 0
              Der Buchhalter
          2. 0
            Rolf B
            1. 0
              Gunnar Bittersmann
              1. 0
                Rolf B
            2. 0
              Der Buchhalter
              1. 0
                Rolf B
              2. 0
                Christian Kruse
                1. 0

                  Zombies

                  Der Martin
                  • zu diesem forum
                  1. -1
                    Gunnar Bittersmann
        2. 0
          Der Buchhalter
          1. 0
            Robert B.
            1. 0
              Gunnar Bittersmann
              1. 0
                Robert B.
                1. 0
                  Der Martin
                  1. 0
                    Robert B.
                    1. 0
                      Der Martin
                      1. 0
                        Robert B.
                        • mathematik
                        1. 0
                          Rolf B
                          1. 0
                            Robert B.
                          2. 1
                            MudGuard
                            • sprache
                            1. 0
                              Gunnar Bittersmann
                              1. 0
                                Tabellenkalk
                              2. 0
                                Gunnar Bittersmann
                                1. 0
                                  Der Martin
                                  1. 0
                                    Auge
                                    • menschelei
                                    • sprache
                                    1. 0
                                      Der Martin
                                    2. 0
                                      Gunnar Bittersmann
                                      1. 0
                                        Gunnar Bittersmann
            2. 0
              Der Buchhalter
            3. 0
              Gunnar Bittersmann
  2. 0
    Rolf B
    1. 0
      Gunnar Bittersmann
      1. 0
        Rolf B
        1. 0
          Der Martin
          1. 0
            Rolf B
        2. 0
          Gunnar Bittersmann
  3. -3
    TS
    • javascript
    • versionsverwaltung
    1. 0
      Rolf B
      1. 0
        JürgenB
        1. 0
          Rolf B
          1. 0
            JürgenB
    2. 0
      Mitleser 2.0
      1. 0
        TS
        • javascript
        • mitarbeit
        • versionsverwaltung
        1. 0
          Mitleser 2.0
          1. 0
            TS
            • mitarbeit
          2. 0
            Rolf B
            1. -2
              TS
              1. 0
                Rolf B
  4. 0
    Samuel fiedler
    1. 0
      Gunnar Bittersmann
  5. 0
    Ich:
  6. 0
    Alexander Hein
    • php
    1. 1
      Rolf B
      1. 1
        TS
        • datentypen
        • php