Marion schrieb:
> shift = (shift + step) % maxShift+1;
Da maxShift hier wohl im allgemeinen Fall keine 2-er Potenz sein wird,
würde ich dir hier von einer % Operation abraten. Das +1 dürfte hier
auch falsch sein, es sei denn du machst da eine Klammer drum herum
1 | shift += step;
|
2 | while( shift > maxShift )
|
3 | shift -= maxShift + 1;
|
das hier
1 | > }
|
2 | > else if(step < 0)
|
3 | > {
|
4 | > if(shift - step < 0) shift = maxShift - (shift - step);
|
5 | > else shift = (shift - step);
|
6 | > }
|
ist mir ehrlich gesagt zu gekünstelt. Da du sowieso mit Vorzeichen
rechnest:
1 | shift += step;
|
2 | while( shift < 0 )
|
3 | shift += maxShift + 1;
|
Ob da jetzt jeweils eine Korrektur um +1 sein muss oder nicht, hängt
davon ab, ob der Wert maxShift auch erlaubt ist oder nicht. Ich würde
allerdings hier nicht in den Berechnungen immer +1 rechnen, sondern den
Wert maxShift an sich um 1 höher halten. Lässt sich ja einfach beim
Setzen bzw. Auslesen des Wertes berücksichtigen. Der Grund ist simpel:
den Wert verändern wird man wohl eher selten, jedoch häufiger anwenden.
Dann spar ich dem µC beim Anwenden das ständige +1 dazurechnen, während
es beim Verändern als Operation unter "ferner liefen" fungiert.