C语言中unsigned int还能显示负数

如图,我在codeblocks中定义了a是一个unsigned int变量,为什么给它赋值-1,能通过编译显示出来?
2026年09月19日 22:46
有1个网友回答
网友(1):

无符号数和有符号数 在存储上并没有区别 在使用的时候 如果符号不匹配 C会做自动转换
比如 你定义了无符号的a然后赋值一个负数 -1 就等同于
a = (unsigned int)-1;
得到的a值实际上是0xffffffff (取决于编译器,32位编译器为这个值)
如果用%u输出 那么就会输出这个数字对应的10进制值 为2^32-1
但是你用%d输出 就等于
printf("%d", (int)a);
于是又被转回了-1