![]() |
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 |
Re: Welches Bit in einer Zahl ist gesetzt
Hol dir die JCL. In JclLogic.pas sind ein Funktionen zur Bithandhabung.
|
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; |
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
|
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; |
Re: Welches Bit in einer Zahl ist gesetzt
Zitat:
Zitat:
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. ![]() 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 |
Re: Welches Bit in einer Zahl ist gesetzt
Also TStringList dafuer ist aber eine Bastonade angemessen.
Floats fuer die Bitbehandlung. :kopfschuettel: |
Re: Welches Bit in einer Zahl ist gesetzt
Zitat:
(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. |
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.)
|
Re: Welches Bit in einer Zahl ist gesetzt
"TStringlist" ist der Benutzername.
Delphi-Quellcode:
Das ist wirklich grauenhaft ineffizienter Code. Power() liefert ein Extended das von Trunc() wieder in ein Int64 verwandelt wird.
if Zahl and trunc(Power(2,15)) > 0 then Bit15_ist_gesetzt
Jetzt erfolgt das "and" auf Int64. Damit ist zwar das ">" korrekt, aber nicht wirklich gut. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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