AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Integerüberlauf bei LongWord

Ein Thema von ing · begonnen am 8. Jun 2016 · letzter Beitrag vom 8. Jun 2016
Antwort Antwort
ing

Registriert seit: 17. Jun 2005
Ort: Ingolstadt
7 Beiträge
 
#1

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 07:01
Welche Delphi-Version, welche Plattform?
Ich verwende Delphi 5 Professional (UpdatePack 1) und habe vor kurzem auf Windows 10 Pro (64 Bit) umgestellt.
  Mit Zitat antworten Zitat
Benutzerbild von TRomano
TRomano

Registriert seit: 24. Nov 2004
Ort: Düsseldorf
196 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 07:05
Hallo und Willkommen in der DP !

So weit hast Du ja auch Recht, aber ... nach mehrmaligen Hinsehen habe ich aber auch erst das Minuszeichen gesehen !

i:= - w;

Das macht nichts weiter als eine Multiplikation mit -1 und schon bist Du aus dem gewähltenm Wertebereich raus und bekommst einen Überlauffehler.

Habe gerade mal ein altes Delphi 7 angeworfen und da steht: Longword = Cardinal (unsigned)

Gruß Thomas
Thomas Forget

Geändert von TRomano ( 8. Jun 2016 um 07:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 07:24
Ein Cast mit i := - Integer( w ); sollte funktionieren.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.375 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 07:30
@Sir Rufo:
Erklärt aber nicht die Ursache. Du bist doch sonst so gründlich Dein Cast würde übrigens trotzdem den Fehler nicht beheben, wenn w einen Inhalt hat (woher auch immer), der zu einem Integer-Überlauf führt.

@Ing:
Hast du denn mal den Debugger bemüht und nachgesehen, was vor der Zuweisung in den Variablen steht? Hast du vielleicht eine der Variablen nochmal woanders (global oder in TForm1) definiert?
Peter
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.403 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 07:51
Ein Cast mit i := - Integer( w ); sollte funktionieren.
wenn man funktionieren mit "da kommt jetzt keine Exception mehr" übersetzt dann ja:

Delphi-Quellcode:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var w:LongWord;
    i:Integer;
begin
  w:= High(LongWord);
  i:=-Integer(w);
  ShowMessage(IntToStr(w)+' / '+IntToStr(i));
end;
Das dürfte aber nur in bestimmten Fällen kein Problem sein
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 08:01
Hallo,
ich denke, der Hinweis mit der Überlaufprüfung hilft hier.
Wenn im alten Programm keine Fehlermeldung kam,
war dort vielleicht die Prüfung ausgeschaltet?


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.550 Beiträge
 
Delphi 12 Athens
 
#7

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 15:05
Delphi rechnet immer erst mit dem QuellTyp weiter, bzw. mit dem kleinsten "gemeinsamen" Typ, der bei der jeweiligen Teiloperation nötig ist.

LongWord > Negation Unäre Operation > LongWord (und das kann nicht negativ sein) > Zuweisung > Integer/LongInt (da Zieltyp = Integer)

Delphi-Quellcode:
i := -Integer(W); // geht nur, wenn W < 2 Milliarden (maximal 31 Bit genutzt)

i := -Int64(W); // falls an "richtig" rechnen muß

// oder du schaltest die Bereichsprüfung ab, bzw. bzw gezielt dort an, wo sie auch nötig ist
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:11 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