汎整数拡張の勉強をしていて、intとunsigned intはどうなるのだろうと思い実行してみたところ、
intは予想通りの動作をしたんですがunsigned intがよく分からない動作をします。

unsigned int i = 0;
unsigned int j = 0xFFFFFFFF;
unsigned int k = 0xFFFFFFFE;
unsigned int l = 0xFFFFFFFF;
i += 0xFFFFFFFF;
printf("i=%d, j=%d, k=%d, l=%d\n", i, j, ++k, +l);

これが全部-1になってしまいます。
汎整数拡張とは違うと思うのですが、理由が分かりません。
どうしてこうなるのですか?