关于位运算0求反输出-1

#include<stdio.h> int main(void) { unsigned char a = 0; a = ~a; printf("%ld\n", a); return 0; }
输出255

#include<stdio.h> int main(void) { unsigned short a = 0; a = ~a; printf("%ld\n", a); return 0; }
输出65535
---------
上面都正确
但是

#include<stdio.h> int main(void) { unsigned int a = 0; a = ~a; printf("%d\n", a); printf("%ld\n", a); printf("%lld\n", a); return 0; }
输出如下
这是为什么呢?
不是应该输出 4294967295 吗
[此贴子已经被作者于2017-2-23 21:01编辑过]