The first time I used the remainder operator I got really confused, specially when the left value is smaller than the right value because it always returns the left value no matter what. For instance:
30 % 60 = 30
If we solve the division it will give us a remainder of 0, because 30 / 60 = 0.5, Why it is returning 30?
I searched the internet and I found this weird operation in the microsoft docs:
a % b = a - (a / b) * b
Even if you’re not a math genius you can clearly see that the operation is silly at best, the result will always be 0, so, What is missing?
Well, after almost an hour of reading I found this: a - trunc(a / b) * b
The operation truncates(floor) the division value, so, we get this:
30 - trunc(30 / 60) * 60
30 - trunc(0.5) * 60
30 - 0 * 60
30 - 0 = 30
If we use the same operation with the challenge (63 % 4):
63 - trunc(63 / 4) * 4
63 - trunc(15.75) * 4
63 - 15 * 4;
63 - 60 = 3
Why is this important?
This means that the Remainder operator can be really versatile, you can use it for timers:
Time % 60 = Time in seconds or minutes. Perfect for display purposes.
You can use it to count turns and assign them as the lesson suggests:
TotalTurns % NumberOfPlayers
Turn ends
Total turns + 1
You can get really creative and use it to tell an enemy which ability will it use next:
Abilitiy to use = Game time % Total number of abilities
Array of abilities[ability to use]
Of course, there are far more uses for this, but it really helps to understand what is going on in the background, I only used the operator for timers, now that I know exactly what it’s going on, my mind immediatly flooded with ideas and ways to optimize and clean my code.