MFreiberger
Level-3
- Beiträge
- 3.282
- Reaktionspunkte
- 926
-> Hier kostenlos registrieren
Moin,
gibt es eine elegante Möglichkeit (ohne Schleife), herauszufinden, ob in einer Variablen genau ein Bit true ist?
Das ist meine Variante mit Schleife:
Aber vielleicht gibt es noch eine kürzere Möglichkeit?
VG
MFreiberger
gibt es eine elegante Möglichkeit (ohne Schleife), herauszufinden, ob in einer Variablen genau ein Bit true ist?
Das ist meine Variante mit Schleife:
Code:
// Variable auswerten
//
#Tdw_mask := dw#16#1; // erste Bit der Maske setzen
FOR #i := 0 TO #Ti_cnt DO // #Ti_cnt bei 32bit-Variable = 31
IF
(#Tdw_value AND #Tdw_mask) <> 0 // wenn Maske <> 0, dann ist mind. 1 Bit true
AND (#Tdw_value AND (#Tdw_mask XOR dw#16#ffff_ffff)) = 0 // wenn invertierte Maske = 0, dann ist kein weiteres Bit true
THEN
#Tx_result := true;
EXIT;
ELSE
#Tx_result := false;
END_IF;
#Tdw_mask := SHL_DWORD(IN := #Tdw_mask, N := 1); // Maske inkrementieren
END_FOR;
Aber vielleicht gibt es noch eine kürzere Möglichkeit?
VG
MFreiberger