AGB  ·  Datenschutz  ·  Impressum  







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

Integerüberlauf bei LongWord

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

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

Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 07:25
Hallo,
Bei folgender Zuweisung bekomme ich einen Runtime Error (Integerüberlauf):

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var w:LongWord;
    i:Integer;
begin
  w:=3;
  i:=-w; // <-- Integerüberlauf
  ShowMessage(IntToStr(w)+' / '+IntToStr(i));
end;
Ich bin mir sicher, dass dieser Code bisher funktioniert hat.
Hat jemand eine Idee wo hier der Fehler liegt?

Danke,
ing
  Mit Zitat antworten Zitat
Lemmy

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

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 07:35
naja.. da Longword einen gültigen Wertebereich von 0..4294967295 hat ist es eigentlich logisch, dass es bei negativer Zuweisung einen Überlauf gibt.

P.S.: Herzlich willkommen in der DP!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 07:53
Hallo

Er steckt in die LongWord-Variable aber keine negativen Werte rein. Bei Dingen wie w:= -w; wäre das so, aber nicht hier.

Und ich bekomme hier ehrlich gesagt auch keinen Überlauf. Welche Delphi-Version, welche Plattform? (Windows/Mac/... bzw. 32/64 Bit?)
  Mit Zitat antworten Zitat
ing

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

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 07:58
Hallo Lemmy,

da Longword einen gültigen Wertebereich von 0..4294967295 hat ist es eigentlich logisch, dass es bei negativer Zuweisung einen Überlauf gibt.
Das leuchtet mir nicht recht ein:
w ist 3
i ist ein Integerwert
i:=-w; sollte also -3 ergeben. wo soll da ein Überlauf stattfinden?
i:=-3; funktioniert ja ohne Probleme.

Außerdem bin ich mir sicher, dass diese Zuweisung schon länger in meinem Programm drin steht und es bisher noch keine Probleme damit gab. ??

ing
  Mit Zitat antworten Zitat
ing

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

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 08: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
193 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 08: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 08: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
 
#7

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 08: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.355 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 08: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.381 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 08:42
Er steckt in die LongWord-Variable aber keine negativen Werte rein. Bei Dingen wie w:= -w; wäre das so, aber nicht hier.
das stimmt, aber er multipliziert einen Longword mit -1 und was ist das Ergebnis? ein Longword.

Und ich bekomme hier ehrlich gesagt auch keinen Überlauf. Welche Delphi-Version, welche Plattform? (Windows/Mac/... bzw. 32/64 Bit?)
schalte mal in den Compileroptionen die Überlaufprüfung ein.
  Mit Zitat antworten Zitat
Lemmy

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

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 08: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
Antwort Antwort
Seite 1 von 2  1 2      

 

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 03:07 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