std::cout << (-7 % 3) << std::endl; std::cout << (7 % -3) << std::endl;
The binary / operator yields the quotient, and the binary % operator
yields the remainder from the division of the first expression by the
second. If the second operand of / or % is zero the behavior is
undefined. For integral operands the / operator yields the algebraic quotient with any fractional part discarded; if the quotient a/b is
representable in the type of the result, (a/b)*b + a%b is equal to a.
(-7/3) => -2 -2 * 3 => -6 so a%b => -1 (7/-3) => -2 -2 * -3 => 6 so a%b => 1
If both operands are nonnegative then the remainder is nonnegative; if
not, the sign of the remainder is implementation-defined.