Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prüfen ob Bitposition gesetzt (https://www.delphipraxis.net/41701-pruefen-ob-bitposition-gesetzt.html)

MatthiasW 7. Mär 2005 13:33


Prüfen ob Bitposition gesetzt
 
Wie kann ich prüfen ob eine Bitposition gesetzt ist?

Also bei "1011" ob an der ersten und letzten stelle eine 1 steht?

Danke für eure Hilfe

alcaeus 7. Mär 2005 13:36

Re: Prüfen ob Bitposition gesetzt
 
Hallo Matthias,

es kommt auf den Variablentyp an. Bei einem String:
Delphi-Quellcode:
If (sVar[1] = '1') and (sVar[4] = '1') then
Ist die Zahl als Integer abgespeichert (also 1011 binär=11 dezimal):
Delphi-Quellcode:
if (iVar and 9) = 9 then
Greetz
alcaeus

moritz 7. Mär 2005 13:38

Re: Prüfen ob Bitposition gesetzt
 
Delphi-Quellcode:
function TBiPi.GetBit(Index: Word): Boolean;
begin
  Result := Image[Index DIV 8] AND ($01 SHL (Index MOD 8)) > $00;
end;
Image ist ein Array of Byte.

himitsu 7. Mär 2005 13:46

Re: Prüfen ob Bitposition gesetzt
 
Zitat:

Zitat von MatthiasW
Wie kann ich prüfen ob eine Bitposition gesetzt ist?

Also bei "1011" ob an der ersten und letzten stelle eine 1 steht?

Bei deinem Problem ist es also ganz einfach.
Delphi-Quellcode:
BitIstGesetzt := X and 1 <> 0;

If X and 1 <> 0 Then ...
X ist irgendein Integer-Typ (Integer, Byte, Word ... siehe Delphi-Referenz durchsuchenInteger-Typen),
BitIstGesetzt ist demnach Boolean
und die 1 steht für ...000001 (Binär).

Also
Code:
1011 and 0001 = 0001     // Ergebnis <> 0 dann ist Bit gesetzt
1010 and 0001 = 0000     // Ergebnis = 0 dann ist nicht gesetzt

maximov 7. Mär 2005 13:52

Re: Prüfen ob Bitposition gesetzt
 
Noch eine möglicjkeit:

Delphi-Quellcode:
type
  T32Bits = set of (0..31);
...
var
  I:integer;
begin
  i := ???;
  ...
  if 0 in T32Bits(i) then juhuu(0); // bit 0 prüfen
  if 3 in T32Bits(i) then juhuu(3); // bit 3 prüfen
end;

//edit: TBits -> T32Bits ;)

MatthiasW 7. Mär 2005 14:31

Re: Prüfen ob Bitposition gesetzt
 
Danke für eure Anworten. Den Typ den ich testen möchte ist ein Cardinal, das ist aber bekanntlich ein Zahlentyp und deswegen verwende ich die Integer variante.

Greetings

Binärbaum 7. Mär 2005 17:05

Re: Prüfen ob Bitposition gesetzt
 
So einfach kann man das überprüfen:
(wert ist der zu prüfende Cardinal, bitIndex die Nummer des Bits (Zählung beginnt bei null, als muss bitIndex im Bereich 0..31 liegen))
Delphi-Quellcode:
function BitGesetzt(wert: Cardinal; bitIndex: Byte): Boolean;
begin
 Result:= (wert and (1 shl bitIndex)) <>0;
end;
Als Ergebnis erhält man True, wenn das betreffende Bit gesetzt ist.

MfG
Binärbaum


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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-2025 by Thomas Breitkreuz