Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Int64 => Problem mit Bits (https://www.delphipraxis.net/109146-int64-%3D-problem-mit-bits.html)

delphis spassbremse 25. Feb 2008 10:46


Int64 => Problem mit Bits
 
Hallo,

ich stehe vor folgendem Problem:
Ich habe ein Int64 und möchte ganz weit vorne 2 Bits rausholen.

Mit "OR" ist es ja kein Problem, nur weiß ich nicht, mit welcher
Zahl ich das ganze zu vergleichen ist, da sämtliche Programme die Berechnung verweigern und ich in
Delphi ja keine übergroßen bits direkt reinschreiben kann habe ich nun ein Problem^^

Meine Int64 Var sieht so aus:

00001011 10010001 00000000 00000000 00000000 00000000 000000000 00000000

Und so soll die "Maske" aussehen:

00001100 00000000 00000000 00000000 00000000 00000000 000000000 00000000
(Nur ich habe keine Ahnung, wie ich die eine Hex bekomme, ohne stundenlang mim Blatt Papier zu rechnen)

Grüße,

Björn

Christian Seehase 25. Feb 2008 10:55

Re: Int64 => Problem mit Bytes
 
Moin Björn,

wenn Du die binäre Darstellung hast, kannst Du die hexadezimale recht leicht bilden:
Jede Stelle einer hexadzimalen Zahl entspricht 4 Bit einer binär dargestellten Zahl.

In Deinem Falle:

00001100 00000000 00000000 00000000 00000000 00000000 000000000 00000000

wird zu:

$0C00000000000000

weil
1100 = 12 (dezimal) = C (hexadezimal)

marabu 25. Feb 2008 10:58

Re: Int64 => Problem mit Bytes
 
Und die beiden Bits kannst du einfach so herausholen:

Delphi-Quellcode:
var
  i64: Int64;
begin
  i64 := Int64($B91) shl 48;
  ShowMessage(IntToHex(i64 shr 56 and 3, 2));
end;
Freundliche Grüße

himitsu 26. Feb 2008 15:35

Re: Int64 => Problem mit Bits
 
Delphi-Quellcode:
(Nur ich habe keine Ahnung, wie ich die eine Hex bekomme, ohne stundenlang mim Blatt Papier zu rechnen)
  • Windows-Taschenrechner aufmachen
    > Startmenü > Programme > Zubehör > Rechner
    oder > Startmenü > Ausführen... > calc[enter]
  • auf Wissenschaftlich umstellen (falls noch nicht aktiv)
  • "Bin" auswählen
  • Binärwert eintippen oder reinkopieren
  • auf "Hex" umstellen
  • Hexadezimalwert rauskopieren

[add]
Zitat:

da sämtliche Programme die Berechnung verweigern
was sind sämtliche Programme? (die Calc.exe kann jetztenfalls mit 64-Bit-Werten umgehen)
Zitat:

und ich in Delphi ja keine übergroßen bits direkt reinschreiben kann
wieso nicht?

Zitat:

Mit "OR" ist es ja kein Problem
OR?
meinst du nicht AND?
Delphi-Quellcode:
Var i: Int64;

i := $1722000000000000;       // 00001011 10010001 00000000 00000000 00000000 ...

i := i and $0C00000000000000; // 00001100 00000000 00000000 00000000 00000000 ...

// i = $0800000000000000       // 00001000 00000000 00000000 00000000 00000000 ...
[add2]
und zu dem, was marabu (in #6) grad schrieb

Delphi-Quellcode:
Var i: Int64;
  i2: Integer;

i := $1722000000000000;             // 00001011 10010001 00000000 00000000 00000000 ....

i2 := Int64Rec(i).Hi and $0C000000; // 00001100 00000000 00000000 00000000

// i2 = $08000000                    // 00001000 00000000 00000000 00000000

delphis spassbremse 26. Feb 2008 16:24

Re: Int64 => Problem mit Bits
 
Zitat:

Zitat von delphis spassbremse
da sämtliche Programme die Berechnung verweigern

Die Zahl ist zu Groß!

marabu 26. Feb 2008 16:38

Re: Int64 => Problem mit Bits
 
Hi,

du musst keine riesige Hex-Zahl bilden, welche den Wertebereich aller Werkzeuge sprengt. Es genügt wenn du nur die signifikanten Bytes betrachtest und den Rest - das sind schließlich Nullstellen - dazuschreibst. Für Bit-Tests wie den von dir beschriebenen kannst du die Nullstellen durch geeignete Schiebeoperationen eliminieren.

Hast du meine beiden Code-Zeilen in Beitrag #3 verstanden?

Freundliche Grüße

stoxx 26. Feb 2008 16:50

Re: Int64 => Problem mit Bits
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

(Nur ich habe keine Ahnung, wie ich die eine Hex bekomme, ohne stundenlang mim Blatt Papier zu rechnen)
als ich auch noch üben musste, hatte ich mir mal so einen netten kleinen optischen Bin-Hex-Int Umrechner gebastelt :-)
Siehe Anhang ..

mfg stoxx


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