Axel Richter: Bug?

Beitrag lesen

Hallo Gunnar,

Dim i As Byte
i = 3
i = i + (-1)

Sollte mich das nun überraschen, dass das keinen Fehler liefert?
Bei dieser Addition wird offenbar nicht versucht, die -1 in den Typ Byte umzuwandeln.
Aber ist diese Addition nicht genau das, was nach jedem Schleifendurchlauf mit der Zählervariablen i (bei Step -1) passiert?

Nein. Für den Wert Step wird im Arbeitsspeicher genau soviel Platz reserviert, wie für die Laufvariable. Und in diesen Platz (Byte) geht eben der Wert (-1) nicht hinein. Daraus folgt - Überlauf. Du kannst durchaus einen Byte-Wert mit dem Integer-Wert (-1) verrechnen, solange der Byte-Wert dabei im Bereich 0 - 255 bleibt.

Probiers so:

Sub test()
 Dim i As Byte
 i = 3
 Do While i > 0
   MsgBox (i)
   i = i - 1
 Loop
End Sub

viele Grüße

Axel