关于编译器对负数取余的问题是一个很有意思的问题:
假如对 -21 % 5 ,则会有两种算法:
1. -21 % 5 = 5 *(-4) - 1 = -1
2. -21 % 5 = 5 *(-5) + 4 = 4
常理来说,两种算法都对,那么编译器究竟是怎么算的呢。这里在lua语言中有一个规律,那就是看后面的数字,比如对5取余,5是正数,那么得到的结果也会是整数;如果对-5取余,得到的结果就会是一个负数,那这时候编译器的算法就是:
-21 % (-5) = (-5) * 4 - 1 = -1