AGB  ·  Datenschutz  ·  Impressum  







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

Mausrad simulieren

Ein Thema von Gehstock · begonnen am 16. Jan 2008 · letzter Beitrag vom 16. Jan 2008
Antwort Antwort
Seite 2 von 2     12   
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: Mausrad simulieren

  Alt 16. Jan 2008, 18:07
Nun, wenn ich das so wandele:

edit1.Text:= IntToStr(dword(-120)); kommt kein -120 heraus.

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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Mausrad simulieren

  Alt 16. Jan 2008, 18:10
Ja eben, binär sind beide vollkommen gleich, erst durch das Casten in signed/unsigned ändern sie ggf. ihren Wert.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#13

Re: Mausrad simulieren

  Alt 16. Jan 2008, 18:11
Ja richtig!
Genau das hätte ich auch erwartet:

Aber mit folgenden Code bleibt es bei -120 ...

Delphi-Quellcode:
procedure TfoTest9.buWhatsThisClick(Sender:TObject);
var t : Dword;
begin
  t:=dword(-120);
  showmessage(inttostr(integer(t)));
end;
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
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Mausrad simulieren

  Alt 16. Jan 2008, 18:15
Zitat von taaktaak:
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
Logisch, die Information steht ja in einem einzigen Bit
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#15

Re: Mausrad simulieren

  Alt 16. Jan 2008, 18:40
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.
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#16

Re: Mausrad simulieren

  Alt 16. Jan 2008, 18:48
Zitat von DeddyH:
Logisch, die Information steht ja in einem einzigen Bit
imho liegt -1 (integer) als $FFFFFFFF im speicher, 1 dagegen als $00000001. -2 dann $FFFFFFFE, usw.

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:
for i:=-10 to 10 do
begin
  memo1.lines.Add(format('%.2d: %.8x',[i,i]));
end;
Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: Mausrad simulieren

  Alt 16. Jan 2008, 19:04
Wenn bei 32-Bit-Werten die ersten 16 nur für das Vorzeichen verwendet würden, wäre das aber extrem ineffektiv.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#18

Re: Mausrad simulieren

  Alt 16. Jan 2008, 19:17
Zitat von DeddyH:
Wenn bei 32-Bit-Werten die ersten 16 nur für das Vorzeichen verwendet würden, wäre das aber extrem ineffektiv.
ich hab nicht gesagt/gemeint, dass die ersten ersten 16 bit *nur* für das Vorzeichen verwendet werden, sondern dass man ggf. die ersten 16 bit braucht, um erkennen zu können, ob es sich um eine negative zahl handelt.
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
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Mausrad simulieren

  Alt 16. Jan 2008, 19:25
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: Mausrad simulieren

  Alt 16. Jan 2008, 19:33
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:54 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