#include main() { unsigned a = -20; unsigned b = 10; printf(\"%d\\n\", (a % b)); printf(\"%d\\n\", (-20 % 10)); } Output: 6 0
unsigned int can hold values from 0 to UINT_MAX, no negative values. So -20 is converted to -20 + UINT_MAX + 1.
unsigned int
UINT_MAX
-20
-20 + UINT_MAX + 1
On your system:
(-20 + UINT_MAX + 1) % 10 != -20 % 10