Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 32bit dword / wie finde ich raus ob bit 0,1 oder 2 gesetzt ? (https://www.delphipraxis.net/11620-32bit-dword-wie-finde-ich-raus-ob-bit-0-1-oder-2-gesetzt.html)

unitedlb 10. Nov 2003 17:43


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.

Daniel 10. Nov 2003 17:47

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.
bit bytebit byte Hier im Forum suchenbit setzen

:roll:

himitsu 10. Nov 2003 17:47

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}

Chewie 10. Nov 2003 17:49

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 //...

unitedlb 10. Nov 2003 18:02

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.

himitsu 10. Nov 2003 18:04

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 ...

Chewie 10. Nov 2003 18:41

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.

Christian Seehase 10. Nov 2003 19:55

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.

negaH 10. Nov 2003 23:36

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:
 
  if Value and (1 shl Bitnummer) <> 0 then ;
Bitnummer kann nun 0 bis 31 sein und auch direkt im Code stehen

Delphi-Quellcode:
  if Value and (1 shl 3) <> 0 then ;
ist das gleiche wie

Delphi-Quellcode:
 if Value and $08 <> 0 then ;
und der Compiler macht aus dem (1 shl 3) intern eh eine Konstante = $08.
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

himitsu 11. Nov 2003 08:20

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
...


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz