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 Welches Bit in einer Zahl ist gesetzt (https://www.delphipraxis.net/54447-welches-bit-einer-zahl-ist-gesetzt.html)

smudo 4. Okt 2005 15:20


Welches Bit in einer Zahl ist gesetzt
 
Kurze Frage:

Wie kann ich mit Delphi ermitteln, ob das 1., 2. oder 15. Bit einer Zahl 1 ist?

Danke

Robert Marquardt 4. Okt 2005 15:27

Re: Welches Bit in einer Zahl ist gesetzt
 
Hol dir die JCL. In JclLogic.pas sind ein Funktionen zur Bithandhabung.

BenjaminH 4. Okt 2005 15:35

Re: Welches Bit in einer Zahl ist gesetzt
 
Delphi-Quellcode:
function IsBit(n,x:Integer):Boolean;//n ist die Zahl x das Bit
Begin
  Result:=(n mod (x*2))>=x;
end;

TStringlist 4. Okt 2005 15:38

Re: Welches Bit in einer Zahl ist gesetzt
 
ansonsten z.B. auch so:

Delphi-Quellcode:
  if Zahl and trunc(Power(2,15)) > 0 then Bit15_ist_gesetzt

Dax 4. Okt 2005 15:41

Re: Welches Bit in einer Zahl ist gesetzt
 
Och Leute ;)
Delphi-Quellcode:
function IsSet(I, Bit: Integer): Boolean;
begin
  Result := I and (1 shl Bit) <> 0;
end;

MaBuSE 4. Okt 2005 16:00

Re: Welches Bit in einer Zahl ist gesetzt
 
Zitat:

Zitat von smudo
Wie kann ich mit Delphi ermitteln, ob das 1., 2. oder 15. Bit einer Zahl 1 ist?

Zitat:

Zitat von Dax
Och Leute ;)
Delphi-Quellcode:
function IsSet(I, Bit: Integer): Boolean;
begin
  Result := I and (1 shl Bit) <> 0;
end;

Hallo zusammen,
diese Lösung funktioniert aber nur bei ganzen Zahlen (Integer). :mrgreen:

Wie sieht es aber bei Kommazahlen (z.B. Single = 4 Byte) aus?

Wie sind die Bits der Mantisse im Speicher?

Ich habe hier mal ein kleines Codeschnippsel gepostet um sich das anzuscheuen.

Einfach 3 Edit Felder (Edit1, Edit2 und Edit3) und einen Button auf ein Form plazieren und in die onClick Methode des Buttons den Quelltext (siehe Link) einfügen.
http://www.delphipraxis.net/internal...=397854#397854

In Edit1 eine Zahl (z.B: 1,5) eingeben und den Button drücken.
In Edit2 wird der Speicherinhalt hexadezimal ausgegeben.
In Edit3 wird der Speicherinhalt binär ausgegeben.

Viel Spaß
MaBuSE

@smudo: Falls Deine Frage beantwortet ist, nicht vergessen mit dem http://www.delphipraxis.net/template...t_answered.gif - Button oben auf der Seite die Frage als beantwortet zu markieren.
Danke

Robert Marquardt 4. Okt 2005 17:21

Re: Welches Bit in einer Zahl ist gesetzt
 
Also TStringList dafuer ist aber eine Bastonade angemessen.
Floats fuer die Bitbehandlung. :kopfschuettel:

MaBuSE 5. Okt 2005 06:36

Re: Welches Bit in einer Zahl ist gesetzt
 
Zitat:

Zitat von Robert Marquardt
Also TStringList dafuer ist aber eine Bastonade angemessen.
Floats fuer die Bitbehandlung. :kopfschuettel:

  1. TStringList??? Wo ist hier eine TStringList ???
  2. Und wieso soll es eine Prügelstrafe für TStringList geben, wenn gar keine TStringList da ist???
  3. Wieso Floats für die Bitbehandlung???
    Das Beispiel zeigt nur, wie die Floats im Speicher abgebildet sind.
    (Also wie ist das 5. Bit eines Floats)
    Mir ist schon klar, dass smudo (wahrscheinlich) Integer gemeint hat.
    Ich warf ja nur ein, dass man auch die "Bits" einer Gleitkommazahl ermitteln kann, da dies vom Thema hier passt.
    Die Frage war ja "wie ermittelt man die Bits einer Zahl" (, nicht eines Integers).
  4. Falls Du die Hex2Bin Funktionalität rügen möchtest, dazu habe ich etwas in dem Beitrag geschrieben. (Ich weiß, dass das nicht schön ist, aber es funktioniert)
ps: In dem Beispiel kann man statt des Single natürlich auch jeden anderen Typ verwenden.
(z.B. String, Array, eigene Typen) Man muss nur den belegten Speicher anpassen und fertig.
Das Beispiel zeigt außerdem wie man mit Hilfe eines Case im Record Speicher überladen kann.

SirThornberry 5. Okt 2005 06:48

Re: Welches Bit in einer Zahl ist gesetzt
 
das einfachste währe wohl einfach einer funktion einen pointer auf ein Integer zu übergeben, dann kann dann später auch jeder was anderes übergeben (char eines Strings, Single etc.)

Robert Marquardt 5. Okt 2005 06:58

Re: Welches Bit in einer Zahl ist gesetzt
 
"TStringlist" ist der Benutzername.
Delphi-Quellcode:
if Zahl and trunc(Power(2,15)) > 0 then Bit15_ist_gesetzt
Das ist wirklich grauenhaft ineffizienter Code. Power() liefert ein Extended das von Trunc() wieder in ein Int64 verwandelt wird.
Jetzt erfolgt das "and" auf Int64. Damit ist zwar das ">" korrekt, aber nicht wirklich gut.


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