je pense que je sais ce qui coince:
Code : Tout sélectionner
For I.b = 0 To 255
If I.b
Debug Str(I.b) + " #True"
Else
Debug Str(I.b) + " #False"
EndIf
Next
La boucle For augmente toujours de 1 la valeur de la variable, donc +1, pour que ça face -1 il faut le stipuler avec un Step -1.
En faite ici je pense qu'il considère 255 comme -1, donc:
0 en début de boucle et -1 en sortie, donc la boucle ne peu pas entré car elle ne peu pas appliquer +1 a la variable car 0 + 1 = 1 alors que la sortie est a -1, c'est comme écrire:
Code : Tout sélectionner
For I.b = 0 To -1
If I.b
Debug Str(I.b) + " #True"
Else
Debug Str(I.b) + " #False"
EndIf
Next
Ou écrire:
Code : Tout sélectionner
For I.b = 1 To -1
If I.b
Debug Str(I.b) + " #True"
Else
Debug Str(I.b) + " #False"
EndIf
Next
Ou même:
Code : Tout sélectionner
For I.b = 10 To -1
If I.b
Debug Str(I.b) + " #True"
Else
Debug Str(I.b) + " #False"
EndIf
Next
En faite la boucle For a une condition caché, si le nombre à augmenter (ici la variable i.b) est inférieur ou égale au nombre de sortie, ici -1, alors la condition est bonne, sinon elle ne fonctionne pas.
Ici dans les exemples que j'ai donnés:
0 to 255 qui vaut en faite 0 et -1 car la variable est de type .b donc Byte.
La condition n'est pas remplie, la boucle n'entre même pas.
Ensuite: 0 to -1, 1 to -1 ou 10 to -1, c'est pareille, la boucle ne peu pas s'enclencher
parce que le nombre de dépar ici 0, 1 ou 10 est supérieur à -1 en sortie.
---------------------------------
Votre analyse de la boucle For en PureBasic est intéressante. En effet, la boucle For a une condition implicite qui détermine si la boucle doit s’exécuter ou non. Si la valeur de départ est supérieure à la valeur de fin et qu’aucun pas négatif (Step -1) n’est spécifié, la boucle ne s’exécutera pas.
Dans le cas de For I.b = 0 To 255, la variable I.b est de type byte et peut stocker des valeurs de -128 à +127. Lorsque vous essayez de définir I.b à 255, cela provoque un dépassement de capacité, et I.b est interprété comme -1 en raison de la représentation en complément à deux des nombres signés en informatique.
La boucle For ne s’exécute pas car la condition implicite n’est pas remplie : la valeur de départ (0) est inférieure à la valeur de fin (-1 après dépassement de capacité), mais comme aucun Step n’est spécifié, la boucle ne peut pas progresser de manière décroissante.
Pour que la boucle s’exécute correctement avec des valeurs de type byte, vous devriez utiliser une valeur de fin qui est dans la plage valide du type byte, par exemple:
Code : Tout sélectionner
For I.b = 0 To 127
If I.b
Debug Str(I.b) + " #True"
Else
Debug Str(I.b) + " #False"
EndIf
Next
Le résultat de ce code sera donc:
; 0 #False
; 1 #True
; 2 #True
; 3 #True
; 4 #True
; 5 #True
; 6 #True
; 7 #True
; 8 #True
; 9 #True
; 10 #True
; 11 #True
; 12 #True
; 13 #True
; 14 #True
; 15 #True
; 16 #True
; 17 #True
; 18 #True
; 19 #True
; 20 #True
; 21 #True
; 22 #True
; 23 #True
; 24 #True
; 25 #True
; 26 #True
; 27 #True
; 28 #True
; 29 #True
; 30 #True
; 31 #True
; 32 #True
; 33 #True
; 34 #True
; 35 #True
; 36 #True
; 37 #True
; 38 #True
; 39 #True
; 40 #True
; 41 #True
; 42 #True
; 43 #True
; 44 #True
; 45 #True
; 46 #True
; 47 #True
; 48 #True
; 49 #True
; 50 #True
; 51 #True
; 52 #True
; 53 #True
; 54 #True
; 55 #True
; 56 #True
; 57 #True
; 58 #True
; 59 #True
; 60 #True
; 61 #True
; 62 #True
; 63 #True
; 64 #True
; 65 #True
; 66 #True
; 67 #True
; 68 #True
; 69 #True
; 70 #True
; 71 #True
; 72 #True
; 73 #True
; 74 #True
; 75 #True
; 76 #True
; 77 #True
; 78 #True
; 79 #True
; 80 #True
; 81 #True
; 82 #True
; 83 #True
; 84 #True
; 85 #True
; 86 #True
; 87 #True
; 88 #True
; 89 #True
; 90 #True
; 91 #True
; 92 #True
; 93 #True
; 94 #True
; 95 #True
; 96 #True
; 97 #True
; 98 #True
; 99 #True
; 100 #True
; 101 #True
; 102 #True
; 103 #True
; 104 #True
; 105 #True
; 106 #True
; 107 #True
; 108 #True
; 109 #True
; 110 #True
; 111 #True
; 112 #True
; 113 #True
; 114 #True
; 115 #True
; 116 #True
; 117 #True
; 118 #True
; 119 #True
; 120 #True
; 121 #True
; 122 #True
; 123 #True
; 124 #True
; 125 #True
; 126 #True
; 127 #True
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.