AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Welches Bit in einer Zahl ist gesetzt

Ein Thema von smudo · begonnen am 4. Okt 2005 · letzter Beitrag vom 7. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#1

Welches Bit in einer Zahl ist gesetzt

  Alt 4. Okt 2005, 16:20
Kurze Frage:

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

Danke
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Welches Bit in einer Zahl ist gesetzt

  Alt 4. Okt 2005, 16:27
Hol dir die JCL. In JclLogic.pas sind ein Funktionen zur Bithandhabung.
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Welches Bit in einer Zahl ist gesetzt

  Alt 4. Okt 2005, 16:35
Delphi-Quellcode:
function IsBit(n,x:Integer):Boolean;//n ist die Zahl x das Bit
Begin
  Result:=(n mod (x*2))>=x;
end;
Benjamin
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Welches Bit in einer Zahl ist gesetzt

  Alt 4. Okt 2005, 16:38
ansonsten z.B. auch so:

  if Zahl and trunc(Power(2,15)) > 0 then Bit15_ist_gesetzt
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#5

Re: Welches Bit in einer Zahl ist gesetzt

  Alt 4. Okt 2005, 16:41
Och Leute
Delphi-Quellcode:
function IsSet(I, Bit: Integer): Boolean;
begin
  Result := I and (1 shl Bit) <> 0;
end;
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: Welches Bit in einer Zahl ist gesetzt

  Alt 4. Okt 2005, 17:00
Zitat von smudo:
Wie kann ich mit Delphi ermitteln, ob das 1., 2. oder 15. Bit einer Zahl 1 ist?
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).

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 - Button oben auf der Seite die Frage als beantwortet zu markieren.
Danke
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

Re: Welches Bit in einer Zahl ist gesetzt

  Alt 4. Okt 2005, 18:21
Also TStringList dafuer ist aber eine Bastonade angemessen.
Floats fuer die Bitbehandlung. :kopfschuettel:
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Welches Bit in einer Zahl ist gesetzt

  Alt 5. Okt 2005, 07:36
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.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Welches Bit in einer Zahl ist gesetzt

  Alt 5. Okt 2005, 07:48
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.)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#10

Re: Welches Bit in einer Zahl ist gesetzt

  Alt 5. Okt 2005, 07:58
"TStringlist" ist der Benutzername.
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 Uhr.
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