基础太差!请问一个c语言基础有关问题

基础太差!请教一个c语言基础问题
char c = 128;
  unsigned int a = c;
  cout << a << endl;
a为什么输出的是4294967168,我知道c最大能保存127,基础太差求解答
------解决思路----------------------
char默认是signed,用整数常量128赋值,实际存入的是截断成一个字节的-128,十六进制是0x80。再赋值给a,扩展成整数-128,如果整数是32位的,就是0xffffff80,按无符号数解释,就是十进制的4294967168
------解决思路----------------------
楼上正解基础太差!请问一个c语言基础有关问题