Einzele Bits setzen, löschen, kippen, testen

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

antome

!!! gesperrt !!!

Betreff: Einzele Bits setzen, löschen, kippen, testen

BeitragDo, Sep 14, 2006 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier einige Funktionen um Bits zu setzen, löschen, kippen oder testen.
Mit kleinem Testprogramm.

Code: [AUSKLAPPEN]

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
antome

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group