AGB  ·  Datenschutz  ·  Impressum  







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

Konvertiere signed zu unsigned

Ein Thema von cheatzs · begonnen am 14. Apr 2004 · letzter Beitrag vom 15. Apr 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von cheatzs
cheatzs

Registriert seit: 31. Aug 2003
Ort: Altenburg
81 Beiträge
 
#1

Konvertiere signed zu unsigned

  Alt 14. Apr 2004, 17:49
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.
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.
Thomas Low
THX und viel Spaß beim Coden
Cheatzs
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Konvertiere signed zu unsigned

  Alt 14. Apr 2004, 17:57
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.
  Mit Zitat antworten Zitat
Benutzerbild von cheatzs
cheatzs

Registriert seit: 31. Aug 2003
Ort: Altenburg
81 Beiträge
 
#3

Re: Konvertiere signed zu unsigned

  Alt 14. Apr 2004, 18:12
Danke ,
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.
Thomas Low
THX und viel Spaß beim Coden
Cheatzs
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Konvertiere signed zu unsigned

  Alt 14. Apr 2004, 18:29
Wenn dich nur die Warnung stört kannst du auch
{$WARN COMPARING_SIGNED_UNSIGNED OFF} ganz oben in die Unit einfügen
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: Konvertiere signed zu unsigned

  Alt 14. Apr 2004, 18:48
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.
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#6

Re: Konvertiere signed zu unsigned

  Alt 14. Apr 2004, 19:58
Solange Code beim Kompilieren Warnungen oder Hinweise produziert, ist er verbesserungsbeduerftig!
Guter code sollte sich ohne jegliche Warnungen und Hinweise kompilieren lassen.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Konvertiere signed zu unsigned

  Alt 14. Apr 2004, 20:39
@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
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#8

Re: Konvertiere signed zu unsigned

  Alt 15. Apr 2004, 01:58
@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.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#9

Re: Konvertiere signed zu unsigned

  Alt 15. Apr 2004, 06:17
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Konvertiere signed zu unsigned

  Alt 15. Apr 2004, 06:45
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...
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 22:34 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