有符号和无符号的区别就在于最高位
有符号的最高位是符号位,1表示负数,0表示正数
无符号所有数位都是表示数值的
当输入-1的时候,相当于赋值c=-1,根据补码规则,-1的十六进制在int类型下是0xffffffff,按照%d输出-1,按照%u输出无符号就是2的32次幂-1,也就是你输出的那个值
而如果定义unsigned char,实际上用%u或者用%d输入是有风险的,因为会实际赋值4个字节,本质上是越界的,正确做法是%hhd或者%hhu
不管怎么样,还是把赋值成了0xff,至于越界的三个字节赋值给谁就不知道了
用%u或者%d输出就都是255了,也就是2的8次幂-1这样的一个值
如果定义的不是unsigned char c,而是char c,那么你会得到另一个不同的结果了