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 |
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:... |
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. |
Re: Integer Theorie
Moin Nailor...
Zitat:
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... |
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: |
Re: Integer Theorie
IntToHEX(-2147483648) = $80000000, somit Bit 31 = 1 wenn negative Zahl.
Gruß Hagen |
Re: Integer Theorie
Zitat:
...:cat:... |
Re: Integer Theorie
Hallo,
Zitat:
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. |
Re: Integer Theorie
Zitat:
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 |
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??? |
Re: Integer Theorie
Das liegt einfach daran, das der Windows-Taschenrechner im Binärmode unabhängig von Vorzeichen arbeitet. Kurz, ja man kann es als Bug sehen, andererseits, wer will schon mit negativen Zahlen im Binärmode arbeiten :mrgreen:
...:cat:... |
Re: Integer Theorie
Zitat:
Wäre schon logisch wenn Bill Gates 6 Euro auf'm Konto hat. Dann hebt er 11 Euro ab und hat 5 Euro Schulden. Nun ist Billy sehr trickreich, geht zu Bank, öffnet den Schlepptop und zerrt den Rechner raus. Er rechnet der Bank vor das 5 Euro Schulden, also -5 in Binär umgewandelt, dann zurück nach Dezimal ein Guthaben von 18446744073709551611 Euro ergibt !! Gruß Hagen |
Re: Integer Theorie
Hat schon jemand den USB-Anschluß an einem Geldautomaten gefunden? :gruebel:
|
Re: Integer Theorie
Moin Luckie,
aber denk dran: Die laufen mit OS/2. ;-) |
Re: Integer Theorie
Stimmt, nach dem ich mal abgehoben hatte, hat sich mir eine BlueScreen präsentieret. :mrgreen:
(PS: Jetzt wird es offtopic.) |
Re: Integer Theorie
Moin...
Zitat:
Es stimmt schon, was Hagen sagte. Es gibt kein +0 und kein -0. Man kann es sich nur so schön merken mit der Null... Nennen wir es eine Eselsbrücke. Also: 11111111111111111111111111111111111111111111111111 11111111111011 ist eine negative Zahl - zu erkennen an der 1 im MSB (Most significant Bit - also das erste von links). Wenn man die Zahl invertiert erhält man folgendes: 00000000000000000000000000000000000000000000000000 00000000000100 also DEZ_4. da wir aber noch für die Nulldifferenz "-0"(auch wenns sie eigentlich nicht gibt) einen Wert abziehen müssen, wird aus +4 dann -5. Dieser Weg ist wie gesagt eine Elselsbrücke, aber funktioniert immer... und geht fast schneller als mit calc.exe :lol: bis denne... |
Re: Integer Theorie
Salut,
um auch hier nochmal meinen Senf dazu zugeben. Wenn ich da richtig informiert bin, so hängt es auch vom Prozessor ab, welches Bit jetzt das Vorzeichen bestimmt. Denn bei den Suns werden die Binärzahlen nämlich nicht wie auf den Windows-Rechner mit dem kleinsten (also 2^0) links sondern mit dem kleinsten Bit Rechts dargestellt. Insofern ist die Zahl 100 auf einem Win-Rechner = 4, auf einer Sun-Maschine entspricht das aber der 1. Aber um auf das Vorzeichen zurück zu kommen. Die Aussage mit dem MSB war da schon richtig und allgemein gültig. Nur alles was danach kommt, nämlich mit dem MSb ganz links war eben typisch Windo*s... Aber wer programmiert schon Delphi auf ner Sun... ;o) Grüße Blechwolf |
Re: Integer Theorie
Zitat:
Das Signum Bit ist immer MSB. Alles andere wäre rechentechnisch idiotisch. Zitat:
Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 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