Stufe 2: Bits setzen, löschen, testen, kippen

Blitz3D Datenbank
Verfügbare Informationen zu "Stufe 2: Bits setzen, löschen, testen, kippen"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: antome
  • Forum: Blitz3D Datenbank
  • Forenbeschreibung: Übersichtliche von Mitgliedern erweiterbare Hilfe für Blitz3D Programmierer
  • aus dem Unterforum: Mathematisches, Zeit, Zufall
  • Antworten: 1
  • Forum gestartet am: Dienstag 31.01.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Stufe 2: Bits setzen, löschen, testen, kippen
  • Letzte Antwort: vor 17 Jahren, 7 Monaten, 22 Tagen, 44 Minuten
  • Alle Beiträge und Antworten zu "Stufe 2: Bits setzen, löschen, testen, kippen"

    Re: Stufe 2: Bits setzen, löschen, testen, kippen

    antome - 16.09.2006, 15:32

    Stufe 2: Bits setzen, löschen, testen, kippen
    Code:
    Local x

    ;Setze die ersten 4 Bits = %1111 = 15   
    For i = 1 To 4
        x = SetBit( x,  i)     
    Next           
    Print x       
    ;Lösche Bit 4 = wert 8  (15-8=7)
    x = DelBit( x,  4)
    Print x

    ;Kippe Bit 4 (Wert 8) um (7+8 = 15 )
    x = SwapBit( x, 4)       
    ;Kippe Bit 3 (Wert 4) um (15-4=11)
    x = SwapBit( x, 3)       
    Print x     

    ;Teste ob Bit Nummer 2 gesetzt ist.
    If TestBit( x, 2) Then Print "Bit Nummer 2 ist gesetzt"
     
    ;Lösche x
    x = 0   
    ;Setze in x 2 Bits mit dem Wert 5
    x = SetBitField( x, %0101)
    Print x

    ;Lösche wenn gesetzt die ersten beiden Bits Wert 3, da aber nur Bit 1 gesetzt ist wird auch nur Bit 1 gelöscht.
    ; 5-1=4
    x = DelBitField(x ,%0011)
    Print x         

    ;Kippe in Variable x das 1. 3. und 4. Bit   
    ;Das erste Bit ist 0 und wird auf 1 gesetzt
    ;Das 3. Bit ist gesetzt und wird gelöscht   
    ;Das vierte Bit ist 0 und wird auf 1 (8) gesetzt
    x = SwapBitField( x, %1101)
    Print x

    ;Teste ob eines der beiden Bits gesetzt ist (Bit 2 und Bit 4)
    Print TestBitField( x, %1010, 0)     
    ;Teste ob alle beiden Bits gesetzt sind.     
    Print TestBitField( x, %1010, 1)
     
    WaitKey()

    End     

    ;Int = SetBit( Int  , Bitnummer )
    ;Setzt in einer Integer Variable ein Bit von 1 bis 32
    Function SetBit( vx , num)
         Local set     
         set = 1 Shl (num-1)               
         Return vx Or set     
    End Function         
       
    ;Int = DelBit( Int  , Bitnummer )
    ;Löscht in einer Integer Variable ein Bit von 1 bis 32
    Function DelBit (vx, num)
        Local del
        del = 1 Shl (num-1)   
        del = -1 Xor del
        Return vx And del     
    End Function
       
    ;Int = SetBit( Int  , Bitnummer )
    ;Löscht oder Setzt in einer Integer Variable ein Bit von 1 bis 32   
    ;Wenn es vorher gesetzt  war ist es nachher gelöscht und umgekehrt.
    Function SwapBit(vx, num)       
          Return vx Xor (1 Shl (num-1))   
    End Function
     
    ;Bool = TestBit( Int  , Bitnummer )
    ;Testet ob ein Bit gesetzt ist  von 1 bis 32   
    ;Wenn das Bit gesetzt ist, dann ist der Rückgabewert 1 = True
    Function TestBit(vx, num)
        Local test   
       test = 1 Shl (num-1)     
       test = vx And test
       Return test Shr(num-1)
    End Function       
     
    ;Int = SetBitField( int, Bitfield )
    ;Setzt ein oder mehrere Bit in einer IntegerVariable
    Function SetBitField( vx , num)               
         Return vx Or num     
    End Function         
                     
    ;Int = DelBitField( int, Bitfield )
    ;Löscht ein oder mehrere Bit in einer IntegerVariable
    Function DelBitField(vx, num)
        Return vx And (-1 Xor num )
    End Function

    ;Bool = TestBitField(int, Bitfiled, mode=0)     
    ;Testet eine IntegerVariable darauf ob mehrere Bits gesetzt sind.
    ;mode = 0 (Standart)   -> Ergebnis ist TRUE/Wahr = 1 wenn ein Bit des getesteten Bitfields gesetzt ist.
    ;mode = 1     -> Ergebnis ist TRUE/Wahr = 1 wenn alle Bits des getesteten Bitfields gesetzt ist, sonst FALSE/Falsch = 0
    Function TestBitField(vx, num, mode=0)   
        Local tmp
        tmp = vx And num
        If mode = 0   
           If   vx And num   = 0
              Return 0
          Else
              Return 1
          EndIf       
       ElseIf mode = 1
           If tmp = vx
                  Return 1
              Else
                  Return 0
           EndIf   
        EndIf
    End Function       

    ;int =  SwapBitField(int , BitField)
    ;kippt alle Bytes in der IntegerVariablen  um auf der Position in der im BitField eine 1 gesetzt ist
    Function SwapBitField(vx, num)
        Return vx Xor num
    End Function



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Blitz3D Datenbank

    Stufe 2: Bits setzen, löschen, testen, kippen - gepostet von antome am Samstag 16.09.2006



    Ähnliche Beiträge wie "Stufe 2: Bits setzen, löschen, testen, kippen"

    Fächerwahl Stufe 11 - patrick (Donnerstag 22.03.2007)
    Stufe 2 im Forum - riku1997 (Samstag 12.05.2007)
    Muss meine mine auf stufe 10 ausbauen...... - champi (Dienstag 15.05.2007)
    stufe 2 der namenssuche ^^ - freyja (Freitag 17.03.2006)
    Stufe 8 Steigerungen - alanthaniel (Donnerstag 17.02.2005)
    Alle Ausbaustufen Stufe [4]: Überlebenskünstler - onkeldude (Mittwoch 27.06.2007)
    Wo Leveln mit welcher Stufe und wo farme ich was? - Klotz (Sonntag 13.08.2006)
    Traumpaar der Stufe - Devil (Sonntag 03.09.2006)
    Karosserie Versteifungssatz, jemand erfahrung - Scooterb7t (Donnerstag 03.06.2010)
    41 Talente mit Stufe 60 - Anjun (Dienstag 28.11.2006)