Consider the following two C program. My question is in first program `unsigned` keyword prints `-12` but I think it should print `4294967284` but it does not print it for `%d` specifier. It prints it for `%u` specifier. But if we look on second program, the output is `144` where it should be `-112`. Something is fishy about `unsigned` keyword which I am not getting. Any help friends!

```
#include <stdio.h>

int main()
{ unsigned int i = -12;
  printf(" i = %d\n",i);
  printf(" i = %u\n",i);
  return 0;
}

```

Above prorgam I got from this link : [Assigning negative numbers to an unsigned int?](https://stackoverflow.com/questions/5169692/assigning-negative-numbers-to-an-unsigned-int)

```
#include <stdio.h>

int main(void)
{unsigned char a=200, b=200, c;
  c = a+b;
 printf("result=%d\n",c);
 return 0;
}

```