AGB  ·  Datenschutz  ·  Impressum  







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

Cardinal anstatt Integer?

Ein Thema von Shaman · begonnen am 6. Feb 2005 · letzter Beitrag vom 3. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#1

Cardinal anstatt Integer?

  Alt 6. Feb 2005, 10:32
Hallo zusammen

Ich würde gerne wissen, wie ihr das so handhabt mit den Cardinals. Sie bieten sich ja für Werte an, die zum Beispiel eine Anzahl oder Länge darstellen. Nur bekommt man leider folgende Warnung, wenn man Cardinals Standardroutinen übergibt, die Integer erwarten:
Code:
[Warnung] Unit1.pas(33): Vorzeichenbehaftete und -lose Typen werden kombiniert - beide Operanden werden erweitert
Und dass der bei jeder Operation mit einem Integer und Cardinal ein Int64 draus macht, passt mir nicht so wirklich.
Wie seht ihr das?

Gruss
Shaman
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
stefan2005

Registriert seit: 30. Sep 2003
Ort: Puchheim
250 Beiträge
 
Delphi 6 Personal
 
#2

Re: Cardinal anstatt Integer?

  Alt 6. Feb 2005, 10:55
hi,
also wenn ich Cardinals an Proceduren übergebe, die Integers erwarten, kommt bei mir gar keine Warnung und alles läuft auch normal !

cu,
stefan2005
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#3

Re: Cardinal anstatt Integer?

  Alt 6. Feb 2005, 11:45
Du kannst den Cardinal doch zu einem Integer casten, dann kommt der Hinweis nicht mehr.
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#4

Re: Cardinal anstatt Integer?

  Alt 6. Feb 2005, 12:22
Cardinal unterstützt keine negativen Werte, Integer schon.
Beide Typen sind zwar gleich groß, haben aber unterschiedliche Wertebereiche.
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Cardinal anstatt Integer?

  Alt 6. Feb 2005, 23:23
Der Typ Integer ist mit Vorzeichen und deckt den Wertebereich von -2147483648 bis 2147483647 ab, Cardinal ist vorzeichenlos und hat einen Bereich von 0 bis 4294967295. Beide Typen sind 32 Bit groß.
Eigentlich müssten alle Prozeeduren/ Funktionen, die Integer als Parameter akzeptieren auch Cardinal akzeptieren. Daher nehme ich z.B. wenn ich weiß, dass ein ganzzahliger Wert in meinem Programm nur größer oder gleich null sein kann Cardinal statt Integer (=LongInt). Probleme hatte ich damit bis jetzt keine.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
DelphiFreund

Registriert seit: 29. Jul 2004
Ort: München
127 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Cardinal anstatt Integer?

  Alt 7. Feb 2005, 00:35
Soweit ich weiss kommt diese Meldung nur, wenn man bsp.

Delphi-Quellcode:
var
  a: Cardinal;
  c. b: Integer;
begin
  c:= a - b;
end;
rechnet.
Sandro
Irren ist menschlich...
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Cardinal anstatt Integer?

  Alt 3. Sep 2006, 14:31
Ich krieg die Warnung immer, wenn ich von GetTickCount einen Integerwert subtrahiere. Wenn ich allerdings vorher GetTickCount unter einer Variablen des Typs Integer speicher und dann davon subtrahiere, kommt die Warnung nicht.

Meine Frage deswegen:

Ist es vor-, nachteilhaft oder egal, ob ich GetTickCount vorher unter einer Variablen des Typs Integer speicher?
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Cardinal anstatt Integer?

  Alt 3. Sep 2006, 14:34
Nachteilhaft. GetTickCount liefert ein unsigned DWORD und ein Integer ist signed. Bei einem Vergleich gehts noch, da dann auf Int64 erweitert wird, was aber auch Performance kostet. Daher auch die Warnung vom Compiler.

Wenn du einem Integer den Wert von GetTickCount zuweist, dürftest du ein Problem mit Werten >2^16-1 bekommen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Cardinal anstatt Integer?

  Alt 3. Sep 2006, 14:36
In solchen Fällen benutze ich immer Delphi-Referenz durchsuchenABS().

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Cardinal anstatt Integer?

  Alt 3. Sep 2006, 14:38
Bei GetTickCount ist es besser, gleich mit Cardinals zu arbeiten.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  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 09:45 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