- Beiträge
- 6.698
- Reaktionspunkte
- 1.689
-> Hier kostenlos registrieren
@PN/DP - Harald: Würden diese beiden Routinen zum 1-Bit- bzw. 0-Bit-Zählen taugen?
Dazu müsste das Negieren von -2.147.483.648 wiederum -2.147.483.648 ergeben.
Zugabe:
Code:
// 1-Bits zählen : - - - - - - - - - -
tdBitPat := idBitPat ; // idBitPat : das zu untersuchende BitMuster
oiZähl1 := 0 ;
WHILE tdBitPat <> 0 DO
oiZähl1 := oiZähl1 + 1 ;
tdBitPat := tdBitPat XOR (tdBitPat AND DINT_TO_DWORD(-(DWORD_TO_DINT(tdBitPat)))) ;
END_WHILE ;
// 0-Bits zählen : - - - - - - - - - -
tdBitPat := NOT idBitPat ; // idBitPat : das zu untersuchende BitMuster
oiZähl0 := 0 ;
WHILE tdBitPat <> 0 DO
oiZähl0 := oiZähl0 + 1 ;
tdBitPat := tdBitPat XOR (tdBitPat AND DINT_TO_DWORD(-(DWORD_TO_DINT(tdBitPat)))) ;
END_WHILE ;
Zugabe:
Code:
// prüfen, ob 1 einziges 1-Bit : - - - - - - - - - -
tdBitPat := idBitPat ; // idBitPat : das zu untersuchende BitMuster
obOneBitOnly := (tdBitPat = (tdBitPat AND DINT_TO_DWORD(-(DWORD_TO_DINT(tdBitPat))))) AND (tdBitPat <> 0) ;
Zuletzt bearbeitet: