![]() |
Re: Mausrad simulieren
Nun, wenn ich das so wandele:
Delphi-Quellcode:
kommt kein -120 heraus.
edit1.Text:= IntToStr(dword(-120));
Heißt das Minus denn nicht, daß das highbit auf 1 ist. Wenn man dann einen signed Wert hat wird das highbit als Minus interpretiert und man hat eine negative Zahl. Grüße Klaus |
Re: Mausrad simulieren
Ja eben, binär sind beide vollkommen gleich, erst durch das Casten in signed/unsigned ändern sie ggf. ihren Wert.
|
Re: Mausrad simulieren
Ja richtig!
Genau das hätte ich auch erwartet: Aber mit folgenden Code bleibt es bei -120 ...
Delphi-Quellcode:
Hihihihi - die Information, dass es sich um eine negative Zahl handelt, bleibt also erhalten (muss ja auch, sonst würd's mit dem Mausrad ja nicht funktionieren
procedure TfoTest9.buWhatsThisClick(Sender:TObject);
var t : Dword; begin t:=dword(-120); showmessage(inttostr(integer(t))); end; |
Re: Mausrad simulieren
Zitat:
|
Re: Mausrad simulieren
Aha. Also gibt es so gesehen (im Speicher) keinen Unterschied zwischen (ganzzahligen) signed/unsigned Datentypen, bis auf dass bei signed-Datentypen das High-Bit interpretiert wird, bei unsigned-Datentypen dieses ignoriert wird? Interessant.
|
Re: Mausrad simulieren
Zitat:
negative Zahlen werden also als $FFFFFFFF-abs(wert+1) dargestellt folglich ist nicht 1 bit für die Kennzeichnung negativer Werte zuständig. Es wären eher die ersten 16 bit (bei 32bit-Integer-Werten), sind alle 0 ist die Zahl positiv. //edit kleines Codebeispiel zum Testen:
Delphi-Quellcode:
Gruß Frank
for i:=-10 to 10 do
begin memo1.lines.Add(format('%.2d: %.8x',[i,i])); end; |
Re: Mausrad simulieren
Wenn bei 32-Bit-Werten die ersten 16 nur für das Vorzeichen verwendet würden, wäre das aber extrem ineffektiv.
|
Re: Mausrad simulieren
Zitat:
Wobei es durchaus sein kann dass man das höchstwertige bit als indikator auslesen kann, da ab diesen Wert die Negativen werte losgehen müssten. ich hab das jetzt nicht bis zuende getestet ;) jedefalls ists nicht so, dass man nur das höchstwertige bit setzen muss, um aus einer positiven Zahl eine negative machen kann. ich vermute mal das die zahlen in der reihenfolge so im speicher liegen: 0,1..2147483647,-2147483648..-1 ($0-$FFFFFFFF) da fällt mir grade ein Fehler in meiner Delphi-hilfe (3) auf. Integer -2147483648..2147483647 32 Bit einschließlich Vorzeichen Cardinal 0..2147483647 32 Bit, besitzt kein Vorzeichen eigentlich müsste der Wertebereich von cardinal doppelt so groß sein...ist ja bei 16bit auch so: Smallint -32768..32767 16 Bit einschließlich Vorzeichen Word 0..65535 16 Bit, besitzt kein Vorzeichen Gruß Frank |
Re: Mausrad simulieren
Du brauchst nur das erste Bit zur Vorzeichenbestimmung. $80000000 ist negativ, $7FFFFFFF positiv, das ist die Grenze der Vorzeichen und da änderst sich auch der Wert des höchstwertigen Bits.
Diese Darstellung hat übrigens zur Folge, dass die Addition von signed und unsigned Werten genau gleich verläuft. Nur die Interpretation ist anders. |
Re: Mausrad simulieren
Versuch mal Folgendes:
Delphi-Quellcode:
var Zahl: integer;
begin Zahl := MAXINT; //011111111 11111111 11111111 11111111 ShowMessage(inttostr(Zahl)); Zahl := Zahl xor (1 shl 31); //11111111 11111111 11111111 11111111 ShowMessage(inttostr(Zahl)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 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