Einzele Bits setzen, löschen, kippen, testen
Übersicht

antome!!! gesperrt !!!Betreff: Einzele Bits setzen, löschen, kippen, testen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group