![]() |
32bit dword / wie finde ich raus ob bit 0,1 oder 2 gesetzt ?
mal wieder eine blöde frage,
aber finde ich raus ob beim dword rückgabewert einer funktion bit 0,1 oder 2 gesetzt ist? die funktion stammt aus einer c++-dll... vielen dank. |
Re: 32bit dword / wie finde ich raus ob bit 0,1 oder 2 geset
Dieses Forum ist mit einer großartigen Suchfunktion ausgestattet. Mit den beiden folgenden Suchanfragen wärest Du auch von selber darauf gekommen.
![]() ![]() :roll: |
Re: 32bit dword / wie finde ich raus ob bit 0,1 oder 2 geset
Delphi-Quellcode:
Var Bit: Boolean;
Bit0 := (irrgendwas and $01) <> 0; {1. Bit / niedrigstes Bit} Bit1 := (irrgendwas and $02) <> 0; {2. Bit} Bit2 := (irrgendwas and $04) <> 0; {3. Bit} Bit3 := (irrgendwas and $08) <> 0; {4. Bit} Bit4 := (irrgendwas and $10) <> 0; {5. Bit} Bit15 := (irrgendwas and $80) <> 0; {16. Bit} Bit30 := (irrgendwas and $4000) <> 0; {31. Bit} Bit31 := (irrgendwas and $4000) <> 0; {32. Bit / höchstes Bit} |
Re: 32bit dword / wie finde ich raus ob bit 0,1 oder 2 geset
Du verknüpfst den DWord-Wert mit einer Zahl, die ausschließlich genau das Bit gesetzt hat, das du herausfinden willst und prüfst auf Gleichheit mit ebendieser Zahl.
Beispiel:
Delphi-Quellcode:
const
MyValue = 1 //heißt das erste Bit ist gesetzt if DWordValue and MyValue = MyValue then //... |
Re: 32bit dword / wie finde ich raus ob bit 0,1 oder 2 geset
Dieses Forum ist nicht nur mit einer großartigen Suchfunktion ausgestattet,
sondern auch mit großartigen Usern die schnell helfen :zwinker: vielen dank. |
Re: 32bit dword / wie finde ich raus ob bit 0,1 oder 2 geset
Chewie's stimmt in etwa mit meinem überein:
aus Sakura's Tut:
Delphi-Quellcode:
...
(1 shl 0) = $01 {1. Bit}
(1 shl 1) = $02 {2. Bit} (1 shl 2) = $04 {3. Bit} ... (1 shl 4) = $20 {5. Bit}
Delphi-Quellcode:
Bit1 := (irrgendwas and $02) <> 0;
{oder} If (irrgendwas and $02) <> 0 Then ...
Delphi-Quellcode:
Bitnummer := 4; {5. Bit / Bit 0 bis 31}
Bit := (irrgendwas and ($01 shl Bitnummer)) <> 0; {oder} If (irrgendwas and ($01 shl Bitnummer)) <> 0 Then ... |
Re: 32bit dword / wie finde ich raus ob bit 0,1 oder 2 geset
Möglicherweise könnte die Prüfung auf <> 0 ein paar Takte schneller sein; auf jeden Fall liefert sie das gleiche Ergebnis.
Die Variante mit der expliziten Prüfung auf den Wert erhöht IMHO aber die Lesbarkeit. |
Re: 32bit dword / wie finde ich raus ob bit 0,1 oder 2 geset
Moin Zusammen,
und ich würde mir für die zu prüfenden Bits Konstanten anlegen, die etwas darüber aussagen, was das jeweilige Bit zu bedeuten hat. |
Re: 32bit dword / wie finde ich raus ob bit 0,1 oder 2 geset
Warum Konstanten ??
1.) @himitsu, Bits werden mit Null basiertem Index durchnumeriert, d.h. Bit 0,1,2,3,4 2.)
Delphi-Quellcode:
Bitnummer kann nun 0 bis 31 sein und auch direkt im Code stehenif Value and (1 shl Bitnummer) <> 0 then ;
Delphi-Quellcode:
ist das gleiche wie
if Value and (1 shl 3) <> 0 then ;
Delphi-Quellcode:
und der Compiler macht aus dem (1 shl 3) intern eh eine Konstante = $08.
if Value and $08 <> 0 then ;
Somit muß man keinerlei zusätzliche Konstanten mehr definieren, wenn ma 1.) die Bits von 0 bis 31 durchnummeriert, wie es Standard ist 2.) mit shl arbeitet und einer Konstanten für den Bitindex. Gruß Hagen |
Re: 32bit dword / wie finde ich raus ob bit 0,1 oder 2 geset
@negaH,
hab ich doch :gruebel: 1. Bit = Bit 0 2. Bit = Bit 1 ... |
Re: 32bit dword / wie finde ich raus ob bit 0,1 oder 2 geset
Eben nicht:
0. Bit = Bit 0 1. Bit = Bit 1 2. Bit = Bit 2 Damit
Code:
Es geht also darum das der Bit Index von 0 bis 31 geht damit der Shift = Bitnummer wird.
3210
0. Bit = 1 shl 0 = 1 = 1 shl Bit 0 = 0001 = 2^0 1. Bit = 1 shl 1 = 2 = 1 shl Bit 1 = 0010 = 2^1 2. Bit = 1 shl 2 = 4 = 1 shl Bit 2 = 0100 = 2^2 3. Bit = 1 shl 3 = 8 = 1 shl Bit 3 = 1000 = 2^3 Du, bzw. Sakuras Tut sagt aber. 1. Bit = Bit 0 2. Bit = Bit 1 3. Bit = Bit 2 dies widerspricht sich, man könnte meinen das ich da ein Krümelkacker bin :-) Allerdings zeigt obige Tabelle sehr schön wie einfach sich alles merken lässt wenn man immer mit 0 basiertem Bitindex arbeitet, und mathematisch gesehen gibt es nur eine korrekte Bitnummerierung die von 0 bis 31 geht. Bei deiner Zählung wäre das
Code:
??? :)
3210
1. Bit = 1 shl 0 = 1 = 1 shl Bit 0 = 0001 = 2^0 2. Bit = 1 shl 1 = 2 = 1 shl Bit 1 = 0010 = 2^1 3. Bit = 1 shl 2 = 4 = 1 shl Bit 2 = 0100 = 2^2 4. Bit = 1 shl 3 = 8 = 1 shl Bit 3 = 1000 = 2^3 Gruß Hagen |
Re: 32bit dword / wie finde ich raus ob bit 0,1 oder 2 geset
Moin Hagen,
Zitat:
Zitat:
(ausgedachtes Beispiel)
Delphi-Quellcode:
als das
const
_IsValidIndex = $4000; begin if (dwFlags and _IsValidIndex) <> 0 then ... end;
Delphi-Quellcode:
Darum Konstanten ;-)
if (dwFlags and $4000) <> 0 then ...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz