关于char类型变量以%u输出的问题

图片说明

129的二进制为10000001
4294967169的二进制为11111111111111111111111110000001
因为是按%u输出的,我觉得结果应该就是129才对。
通过VS试运行,算出来的是4294967169,寻求大神解释。

这个是位扩展的问题。
将一个数字扩展字节(比如你这个是1个字节扩展到4个字节),那么如果最高位是0,扩展后高位补0。如果是1,那么补1.
如果i是0~127,那么就还是127
128以上,你觉得是129,但是对于char来说,它是有符号的,最高位是1。其实不是129,而是-127了。扩展到4字节为了还是保持-127,就在前面补1。