关于C语言的无符号整型?

为什么换个数据类型就不一样

有符号和无符号的区别就在于最高位
有符号的最高位是符号位,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,那么你会得到另一个不同的结果了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-12-18
这是因为这两种数据类型所占的字节数不一样,因为大家都是unsigned,所以输入负10,他们填充的数据都是二进制全1,只是int,填充的是四个字节,而char填充的是一个字节。所以当以int形式输出时,系统把char的八个二进制位全部填充在了int的最低位,前面更高的位上都是0,所以就造成这时输出的两个都是正数。
相似回答