#include main() { unsigned a = -20; unsigned b = 10; printf(\"%d\\n\", (a % b)); printf(\"%d\\n\", (-20 % 10)); } Output: 6 0
And what are you expecting?
a % b is equivalent to, let's substitute the values and apply the unary - to the unsigned int value of 20, (UINT_MAX-20+1) % 10 and the type of the result is unsigned int and you're printing it with %d, which is wrong. You should use %u here.
a % b
-
(UINT_MAX-20+1) % 10
unsigned int
%d
%u