Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Integer Theorie (https://www.delphipraxis.net/9727-integer-theorie.html)

nailor 2. Okt 2003 14:48


Integer Theorie
 
Hi!

Ich habe eine Frage dazu, wie Delphi Intgers speichert. Es sind ja 32 bits. Ich will jetzt irgendwoher wissen, wie das Funktioniert. Arbeitet Delphi mit Offset oder mit Flags, um negative Zahlen darzustellen. Welche Bitmuster entsprechen -1, 0, 1, -2147483648, 2147483647???

Link würde reichen, oder Ihr

sakura 2. Okt 2003 14:56

Re: Integer Theorie
 
Delphi verlässt sich da ganz auf die Prozessorstruktur. Dieser nutzt das höchste Bit (31) für das Vorzeichen. Die Bits 00-30 sind für den Wert.

...:cat:...

Christian Seehase 2. Okt 2003 15:06

Re: Integer Theorie
 
Moin Nailor,

wenn Du die Bitmuster eines Integers haben willst kannst Du Dir das mit Windows Bordmitteln anschauen:
Der Rechner (CALC.EXE) kann auch auf Binärdarstellung umgestellt werden.

Das Vorzeichen wird immer durch das höchst Bit angegeben. Ist das gesetzt, wird die Zahl als negativ angesehen.
Das ist aber Konvention für Integer. Bei Cardinal wird dieses Bit als "ganz normales" Bit angesehen, da Cardinals ja nur 0 oder positiv sind.

Tonic1024 2. Okt 2003 15:29

Re: Integer Theorie
 
Moin Nailor...

Zitat:

Zitat von sakura
Delphi verlässt sich da ganz auf die Prozessorstruktur. Dieser nutzt das höchste Bit (31) für das Vorzeichen. Die Bits 00-30 sind für den Wert.

Ist ja auch logisch... 32 Bit währen ja DEZ_4294967296 also BIN_100000000000000000000000000000000.

Wenn nun, wie sakura sagt, nur 31 Bit Werte enthalten ist DEZ_2147483648 - was ja auch hinkommt, da die DEZ_0 ein positiver (?!?) Wert ist und IntMax demnach DEZ_2147483647. damit bleibt für die negativen Zahlen ein Wert mehr übrig (weil es -0 (also minus Null) nun mal nicht gibt) also DEZ_-2147483648. Das hasst du ja auch schon geschrieben und dir damit deine frage eigentlich schon selbst beantwortet. 8)

Dummerweise ist mir entfallen ob die 1 oder die 0 im MSB (also Bit 31) für positiv steht... sonst könnt ich dir auch den Binärwert sagen. :oops:

[EDIT] Da oben stehts ja... 1 ist positiv... Wer lesen kann ist klar im Vorteil :wall: [/EDIT]

bis denne...

Sanchez 2. Okt 2003 15:37

Re: Integer Theorie
 
Habe soeben einen Bug in Calc.exe gefunden.

Versucht mal -5 dez nach Binär umzuwandeln.

5 ergibt 101, passt
-5 ergibt 11111111111111111111111111111111111111111111111111 11111111111011

:bounce2:

negaH 2. Okt 2003 15:37

Re: Integer Theorie
 
IntToHEX(-2147483648) = $80000000, somit Bit 31 = 1 wenn negative Zahl.

Gruß Hagen

sakura 2. Okt 2003 15:41

Re: Integer Theorie
 
Zitat:

Zitat von Sanchez0815
Habe soeben einen Bug in Calc.exe gefunden.

Versucht mal -5 dez nach Binär umzuwandeln.

5 ergibt 101, passt
-5 ergibt 11111111111111111111111111111111111111111111111111 11111111111011

:bounce2:

Nicht wirklich, daß ist die 64-Bit Darstellung, da ist halt "erst" Bit 63 für die negativ-Maskierung da ;-)

...:cat:...

Jens Schumann 2. Okt 2003 15:43

Re: Integer Theorie
 
Hallo,
Zitat:

Zitat von Sanchez0815
Habe soeben einen Bug in Calc.exe gefunden.

zu früh gefreut. Das ist kein Bug negative Zahlen werden im Zweier Komplement dargestellt.
Ob es jetzt das Zweier Komplement +1 o. das Zweier Komplement -1 ist habe ich vergessen (zu lange her) Durch die Darstellung im Zweier Komplement läßt sich eine Subtraktion als Addition durch führen.

negaH 2. Okt 2003 15:43

Re: Integer Theorie
 
Zitat:

Habe soeben einen Bug in Calc.exe gefunden.

Versucht mal -5 dez nach Binär umzuwandeln.

5 ergibt 101, passt
-5 ergibt 11111111111111111111111111111111111111111111111111 11111111111011
Das ist kein Bug, sondern die Komplementärdarstellung einer negative Zahl die im Bereich -2^63 <= 0 < +2^63 liegt.

Durch diese Darstellung muß die CPU das Vorzeichen nicht extra berechnen.
Zb. -5 + +6 = +1

$FFFFFFFB = -5
+ $00000006 = +6
= $00000001 = +1

Somit ist die Begründung, warum im negative Bereich eine Zahl mehr dargestellt werden kann, einfach weil nur dadurch die Rechnungen mit Komplementären Zahlen möglich ist. Es hat also nichts damit zu tun das es kein +0 oder -0 geben kann.

Gruß hagen

Sanchez 2. Okt 2003 15:45

Re: Integer Theorie
 
Rechnen kann ers aber nicht in beide Richtungen

Wenn ich jetzt
5 dez nach binär umwandle
invertiere
wieder nach dezimal
bekomme ich 18446744073709551611

Sollte da nicht -5 rauskommen???


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