Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi INT64 nicht ordinal? (https://www.delphipraxis.net/28330-int64-nicht-ordinal.html)

Dannyboy 23. Aug 2004 12:19


INT64 nicht ordinal?
 
Hallo zusammen,
in einem Programm bekam ich bei diesem Quelltext ...
Delphi-Quellcode:
var i : int64;
begin
  for i:= 0 to 1000 do
    //...
... die Fehlermeldung, dass ein ordinaler Datentyp für die zählergesteuerte Schleife notwendig ist. Da ich aber den int64-Typ benötige, habe ich das nun leider so machen müssen:
Delphi-Quellcode:
var i : int64;
i:= 0;
while i <= 1000 do
begin
  //<tue irgend was>
  inc(i);
end;
Gibt es bessere Vorschläge/Varianten? :gruebel:

Luckie 23. Aug 2004 12:20

Re: INT64 nicht ordinal?
 
Int64 ist nicht ordinal, weil es ein zusammengesetzter Datentyp ist. (Passt nicht in ein Prozessorregister - oder so.)

dizzy 23. Aug 2004 12:21

Re: INT64 nicht ordinal?
 
Ja, Integer nehmen, oder Cardinal ;)

Int64 ist ein zusammengesetzter Datentyp - native 64Bit-Datentypen gibts nur unter 64Bit CPUs mit 64Bit OS und einer Sprache die für 64Bit ausgelegt ist ;)

Stevie 23. Aug 2004 12:22

Re: INT64 nicht ordinal?
 
Delphi-Quellcode:
repeat
  ...
  Inc(i);
until i = 1000;
ist imho schneller!

dizzy 23. Aug 2004 12:24

Re: INT64 nicht ordinal?
 
@Stevie: Aber auch nur, weil du auf "=" und nicht "<=" prüfst. Ansonsten ist der einzigen Unterschied, dass die repeat-Schleife mindestens ein Mal durchlaufen wird, while aber erst garnicht wenn die Abbruchbedingung von vorne herein nicht passt.

Stevie 23. Aug 2004 12:27

Re: INT64 nicht ordinal?
 
Zitat:

Zitat von dizzy
@Stevie: Aber auch nur, weil du auf "=" und nicht "<=" prüfst. Ansonsten ist der einzigen Unterschied, dass die repeat-Schleife mindestens ein Mal durchlaufen wird, while aber erst garnicht wenn die Abbruchbedingung von vorne herein nicht passt.

:oops: Ich dachte, die wird in asm irgendwie anders umgesetzt, so dass sie schneller ist...

dizzy 23. Aug 2004 12:34

Re: INT64 nicht ordinal?
 
Nö, beides läuft im Wesentlichen auf ein "cmp" und ein "jp" oder "jz" oder "jnz" oder halt irgendeinen Sprungbefehl hinaus. Evtl. auch noch die eine oder andere Addition/Subtraktion, je nach Abbruchbedingung.

Vjay 23. Aug 2004 15:06

Re: INT64 nicht ordinal?
 
Zitat:

Zitat von Stevie
Zitat:

Zitat von dizzy
@Stevie: Aber auch nur, weil du auf "=" und nicht "<=" prüfst. Ansonsten ist der einzigen Unterschied, dass die repeat-Schleife mindestens ein Mal durchlaufen wird, while aber erst garnicht wenn die Abbruchbedingung von vorne herein nicht passt.

:oops: Ich dachte, die wird in asm irgendwie anders umgesetzt, so dass sie schneller ist...

Ist soweit ich weiss auch so. Wurde auch mal hier im Forum diskutiert glaube ich.

Wenn du nur einen bestimmten bereich hochzählen willst, der auch in einen integer passt, würde es auch gehen einen integer zu verwenden und den int64startwert dazuzurechnen.

Nur mal so :-D

Robert Marquardt 23. Aug 2004 17:47

Re: INT64 nicht ordinal?
 
Warum nimmst du nicht einen Integer?
Wenn du explizit einen Int64 innerhalb der Schleife brauchst, dann kannst du ja den Integer umtypen.
Eine Schleife die ernsthaft einen Int64 zum Zaehlen braucht ist mit grosser Wahrscheinlichkeit Unsinn.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 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 by Thomas Breitkreuz