anfängerfrage hex und eine stelle springen
-
@Wade1234 sagte in anfängerfrage hex und eine stelle springen:
ja aber nur, wenn das array 2^n elemente groß ist; ansonsten hast du nachher beim überlauf ein problem bzw. das falsche element.
Gar nicht. Es wird bis arraylength-1 gezählt und dann gehts wieder bei 0 los. Probier es einfach aus.
-
Mhm. Und was genau bringt die Limitierung dex Index *nach* der Dereferenzierung?
-
@Swordfish sagte in anfängerfrage hex und eine stelle springen:
Mhm. Und was genau bringt die Limitierung dex Index nach der Dereferenzierung?
Das ist für den nächsten Aufruf, wenn wieder in die Funktion gehüpft wird.
-
@RBS2 sagte in anfängerfrage hex und eine stelle springen:
wert = array[index];
Noch schicker wäre:
wert = array[(index++)%arraylength];
Dann kann die Zeile darunter auch weg.
-
@RBS2
also einmal angenommen, wir nehmen als indexvariable ein unsigned int, welches 4 byte groß ist. der überlauf findet dann beim wechsel von (laut windows-taschenrechner) 4.294.967.295 auf 4.294.967.296 bzw. von 2^32 - 1 auf 2^32 statt.ist das array jetzt 2, 4, 8, ..., 65536, ... elemente groß, so wird vor dem überlauf das element 1, 3, 7, ..., 65535, ... angesprochen und nach dem überlauf das element 0 (weil 0 % irgendwas ist immer 0). ist das array aber 10, 100, 10000 elemente groß, so werden vor dem überlauf die elemente 5, 95, 7295 angesprochen und nach dem überlauf wieder das element 0, d.h. die restlichen elemente werden übersprungen, was je nach programm mehr oder weniger schwerwiegende auswirkungen haben kann.
-
@RBS2 sagte in anfängerfrage hex und eine stelle springen:
Noch schicker wäre:
wert = array[(index++)%arraylength];
Dann kann die Zeile darunter auch weg.
nein das wäre überhaupt nicht schick, weil es unübersichtlich ist.
-
@Wade1234 sagte in anfängerfrage hex und eine stelle springen:
ist das array aber 10, 100, 10000 elemente groß, so werden vor dem überlauf die elemente 5, 95, 7295 angesprochen
Schau hier, für 10 elemente. Lopt prima!
-
@Wade1234 sagte in anfängerfrage hex und eine stelle springen:
nein das wäre überhaupt nicht schick, weil es unübersichtlich ist.
Der Ausdruck rechts hat weniger als 30 Zeichen.
-
ja aber da findet doch kein überlauf statt, oder?
https://ideone.com/U3umpX vs. https://ideone.com/6lO3UR
beim ersten programm werden die letzten 4 elemente einfach übersprungen.
-
@Wade1234 sagte in anfängerfrage hex und eine stelle springen:
ja aber da findet doch kein überlauf statt, oder?
https://ideone.com/U3umpX vs. https://ideone.com/6lO3UR
beim ersten programm werden die letzten 4 elemente einfach übersprungen.
Wieso setzt du index auf 65500, wenn Arraylength 10 ist? Ich kapiere gar nichts mehr,
-
index habe ich auf 65500 gesetzt, weil es bei 65536 überläuft und dann wieder 0 wird, ich dir aber keine 65537 bildschirmzeilen zumuten wollte.
wenn index beim programmstart auf 0 gesetzt wird und man dann 65536 mal auf den knopf drückt und index jedes mal erhöht wird, läuft es über.
wenn index jetzt vom typ unsigned int (oder unsigned long long int) ist, passiert das irgendwann auch, nur eben später.
-
@Wade1234
Deswegen ja auchindex = (index + 1) % arraylength;
Dann bleibt index kleiner als arraylength.