Autor Beitrag
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 27.05.05 17:51 
sonderbar:
ich möchte ne schleife die mir für alle werte von 0 - $FFFFFFFF eine funktion ausführt.
der compiler weigert sich aber, dies zu tun: setze ich nen breakpoint passiert gar nix (breakpoint wird grün)
ausblenden Delphi-Quelltext
1:
2:
for zahl = low(typ) to high(typ) do
  ... tut nix

nehme ich die obere grenze shr 1 dann tut es, zumindest bei longword
woran liegt das ?

hier ne demo:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
program Project2;
{$APPTYPE CONSOLE}
uses windows, sysutils;
function isPotenzOfTwo(zahl: dword): boolean; register;
asm
   xor ecx, ecx
   cmp eax, 2
   jl @false
   @loop:
   cmp ecx, 32
   je @lookup
   sar eax, 1
   inc ecx
   jc @lookup
   jmp @loop
   @lookup:
   cmp eax, 0
   jg @false
   mov eax, 1
   jmp @out
   @false:
   xor eax, eax
   @out:
end;

  var zahl:integer;

begin
//  useinputoutput;
  for zahl := low(dword) to high(dword) shr 1 do // shr 1 wegmachen und nix geht mehr
  if isPotenzOfTwo(zahl) then begin
    writeln(inttostr(zahl));
  end;
  readln;
end.

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
TomT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 116

Suse 9.1 WinXP
D6 Pers
BeitragVerfasst: So 29.05.05 12:27 
Machs doch einfach direkt so:

ausblenden Delphi-Quelltext
1:
2:
for i:= 0 to $FFFFFFFF do
  bla;


mfg TomT

_________________
...und da wurde mir klar, dass eine Toolbar keine Kneipe für Heimwerker ist.
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: So 29.05.05 13:17 
du kannst nur bis maximal

$7FFFFFFF
bzw high(dword) div 2
bzw high(integer)

machen
alles andere ist ein "Überlauf bei Konvertierung oder arithmetischer Operation"

das liegt daran das ne for schleife mit nem JNZ geprüft wird und > $80000000 ist ja alles negativ
da die CPU immer mit integeer und nicht dword rechnet

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
TomT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 116

Suse 9.1 WinXP
D6 Pers
BeitragVerfasst: So 29.05.05 16:48 
user profile iconuall@ogc hat folgendes geschrieben:

das liegt daran das ne for schleife mit nem JNZ geprüft wird und > $80000000 ist ja alles negativ
da die CPU immer mit integeer und nicht dword rechnet


Selbst, wenn meine Zählervariable von einem vorzeichenlosen Typ ist?
Tät mich etwas wundern. In dem Fall könnte könnte ich ja die hälfte des Wertebereichs gar nicht werwenden.

_________________
...und da wurde mir klar, dass eine Toolbar keine Kneipe für Heimwerker ist.