Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bits (https://www.delphipraxis.net/37741-bits.html)

Rangarig 9. Jan 2005 17:05


Bits
 
Hi,

ich habe ein Prblem mit Bits. Ich weiß nicht so genau, wie man rausfinden kann, ob ein Bit gesetzt ist oder nicht.

Vieleicht kennt jemand ein gutes Tut über soetwas.

Thx & Mfg

Nightshade 9. Jan 2005 17:24

Re: Bits
 
Delphi-Quellcode:
function TestBit(Value : byte; bit : byte) : boolean;
begin
  if (Value AND (1 shl bit )) = (1 shl bit) then
    result := true
  else
    result := false;
end;
Sollte so gehen...

Ansonsten guck dir mal die Befehle "AND", "OR", "NOT" an...

Rangarig 9. Jan 2005 18:36

Re: Bits
 
Danke Nightshade.

das werde ich gleich ausprobieren. Die Befehle "AND", "OR", "NOT", etc kenne ich. Habe ich schon in abfragen benutzt. Ich wusste nur nicht, wie die als Bit-Abfrage benutz werden.

glkgereon 9. Jan 2005 18:53

Re: Bits
 
ginge es nich auch kürzer so?

Delphi-Quellcode:
function TestBit(Value : byte; bit : byte) : boolean;
begin
  result:=(Value AND (1 shl bit )) = (1 shl bit);
end;
ich hätte es jetzt spontan so gemacht:

Delphi-Quellcode:
function TestBit(Value : byte; bit : byte) : boolean;
begin
  result:=(Value and (1 shl bit))<>0;
end;

Rangarig 9. Jan 2005 19:20

Re: Bits
 
So wie Nightshade es im Beispiel gezeigt hat, habe ich es nicht hinbekommen. Ich habe es jetzt nachdem ich ein Beispiel hatt so gemacht:

Delphi-Quellcode:
function TestBit(Value : byte; bit : byte) : boolean;
begin
   result := ((Value AND bit) = bit));
end;
Jetzt hat sich mir ncoh eine Frage gestellt, weiß jemand, wie ich eine Konstante gleich Binär angeben kann? Bei Hexadezimal weiß ich es, aber nicht binär;

glkgereon 9. Jan 2005 19:23

Re: Bits
 
das kann so aber net funzen, oder?

hast du das mal getestet?

Rangarig 9. Jan 2005 19:24

Re: Bits
 
Ja das habe ich so getestet läuft ohne Probleme.

glkgereon 9. Jan 2005 19:28

Re: Bits
 
nein, es ist falsch!!!

ich hab 2er potenzen eingegeben -> genau 1 bit true

es müsste so sein:

1 1
2 2
4 3
8 4
16 5
32 6

es ist aber laut deiner procedure so:

1 1
2 2
4 4
8 8
16 16

moritz 9. Jan 2005 19:40

Re: Bits
 
Okya, um das ganze etwas einfacher zu machen:
Delphi-Quellcode:
function BitSet(Value: Byte; BitCnt: Byte): Boolean;
begin
  Result := (( Value AND Round ( power (2, BitCnt-1) )) = Round ( power (2, BitCnt-1) ));
end;
Beispiel:
Delphi-Quellcode:
  if BitSet (24, 4) then // TestBit (00011000, 00001000)
    ShowMessage ('Ja!');
if BitSet (24, 5) then // TestBit (00011000, 00010000)
ShowMessage ('Ja!');[/delphi]

glkgereon 9. Jan 2005 19:42

Re: Bits
 
aber das is so lang :(

das funzt:

Delphi-Quellcode:
function TestBit(Value : byte; bit : byte) : boolean;
begin
   result:=(Value AND (1 shl bit )) = (1 shl bit);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:22 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