Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Konvertiere signed zu unsigned (https://www.delphipraxis.net/20205-konvertiere-signed-zu-unsigned.html)

cheatzs 14. Apr 2004 17:49


Konvertiere signed zu unsigned
 
Hi Leutz,
ich hab mal eine Frage. Ich addiere manchmal signed und unsigned Zahlentypen.
Wenn das der Fall ist bringt mir Delphi immer ne Warnung. :shock:
Nun, ich weiß warum, aber leider nicht wie ich es weg bekomm.
Mit der Funktion abs(), die normalerweise ja den Absolutwert ausgibt, bekomm ich trotzdem die Warnung.

Gibts da irgend eine Möglichkeit z.B. einem Integer das Vorzeichen zu klauen (ohne Int64)?
Die Warnungen stören nämlich irgendwann enorm. :?

Robert Marquardt 14. Apr 2004 17:57

Re: Konvertiere signed zu unsigned
 
Delphi-Quellcode:
var
  SignedInt: Integer;
  UnsignedInt: Cardinal;
begin
  // Warnung
  if SignedInt > UnsignedInt then
  // keine Warnung
  if Cardinal(SignedInt) > UnsifgnedInt then
Der Weg heisst Umtypung (typecast).
Man muss aber aufpassen was man tut. Der Compiler macht was man ihm befiehlt.
Er interpretiert hier SignedInt als Cardinal.

cheatzs 14. Apr 2004 18:12

Re: Konvertiere signed zu unsigned
 
Danke :thuimb: ,
darauf hätt ich doch glatt auch selbst kommen können.
Manchmal fällt einem sowas halt nicht ein.

Das mit dem aufpassen ist kein Problem. Ich weiß genau, dass das nie Negativ werden kann.

SirThornberry 14. Apr 2004 18:29

Re: Konvertiere signed zu unsigned
 
Wenn dich nur die Warnung stört kannst du auch
Delphi-Quellcode:
{$WARN COMPARING_SIGNED_UNSIGNED OFF}
ganz oben in die Unit einfügen

Robert Marquardt 14. Apr 2004 18:48

Re: Konvertiere signed zu unsigned
 
Das wuerde ich nicht tun. Es ist eine Warnung und kein Hint.
So etwas abzuschalten ist gefaehrlich. Manchmal ist die Warnung angebracht.
Sicherheit (= Warnungen in Kauf nehmen oder beseitigen) ist wichtiger als Bequemlichkeit (= Warnungen unterdruecken).

Bei der JediVCL haben wir jetzt keinerlei Warnungen oder Hints mehr und nur an einigen Stellen schalten wir die Warnungen fuer einige Zeilen lang ab wo es nicht anders geht.

w3seek 14. Apr 2004 19:58

Re: Konvertiere signed zu unsigned
 
Solange Code beim Kompilieren Warnungen oder Hinweise produziert, ist er verbesserungsbeduerftig!
Guter code sollte sich ohne jegliche Warnungen und Hinweise kompilieren lassen.

SirThornberry 14. Apr 2004 20:39

Re: Konvertiere signed zu unsigned
 
@w3seek: Stimmt nicht ganz - Früher war Timer.Interval mal ein Integer, seit Delphi7 oder so ist es ein Cardinal und somit kommen auch die warnungen wenn ich timer.interval mit einem Integer vergleiche. Zu verbessern gibts da nix da es nie vorkommt das der Integer zu groß wird oder der Cardinal < 0. Bei einer simplen Abfrage wie
Delphi-Quellcode:
 if Timer1.interval > OwnComponent1.interval then
 {...]
kommt schon die meldung und die kam bei vorhergehenden versionen nicht... Und ein Typecast drumherum machen ist ja auch nicht besser als die meldung zu unterdrücken

w3seek 15. Apr 2004 01:58

Re: Konvertiere signed zu unsigned
 
@SirThornberry
Das aendert nichts an der Tatsache dass code ohne jeglichen Warnungen und Hinweisen kompiliert werden koennte. Und ja, der Hinweis ist auch in dem Fall berechtigt, denn der Compiler korrigiert automatisch (kann aber auch fehlerhaft korrigiert werden) deinen fehler und warnt dich, dass man eben nur gleiche typen vergleichen soll.

angenommen:
Code:
if -8 (also signed) > 4 (unsigned) then ...
es gibt zwei moeglichkeiten wie man sowas interpretieren koennte:
1. beide typen auf signed bringen, dann waere die bedingung false, da -8 nunmal nicht groesser als 4 ist.
2. beide typen auf unsigned bringen, damit wuerde man z.b. wenn man beide auf Cardinal haette folgende bedingung: ($FFFFFFFF-7) > 4 und dann waere die bedingung natuerlich true

Ob das im einzelnen fall (wie z.b. Timer) je der Fall ist, kann der compiler nicht wissen. Deshalb lieber einen typecast mehr als eine haessliche Warnung/Hinweis.

Robert Marquardt 15. Apr 2004 06:17

Re: Konvertiere signed zu unsigned
 
Zitat:

Zitat von SirThornberry
Und ein Typecast drumherum machen ist ja auch nicht besser als die meldung zu unterdrücken

Stimmt nicht solange der Typecast bewusst eingefuegt wird um das korrekte Verhalten zu erzwingen.

SirThornberry 15. Apr 2004 06:45

Re: Konvertiere signed zu unsigned
 
Naja, ok - ihr habt recht :? Aber ändern brauch ich trotzdem nix an meinen sourcen da 2 positive werte verglichen werden die niemals außerhalb des eigenen und des anderen Gültigkeitsbereiches sind...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.
Seite 1 von 2  1 2      

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