我不小心使用了“%d”来使用在线编译器打印无符号整数。我以为会弹出错误,但我的程序可以成功运行。很高兴我的代码能正常工作,但我就是不明白为什么。
#include <stdio.h>
int main() {
unsigned int x = 1
printf( "%d", x);
return 0;
}
最佳答案
“无符号整数”的值足够小,以至于未设置 MSB(最高有效位)。如果是,printf() 会将值视为“负符号整数”值。
int main() {
uint32_t x = 0x5;
uint32_t y = 0xC0000000;
printf( "%d %u %d\n", x, y, y );
return 0;
}
5 3221225472 -1073741824
你可以看出区别。
对于“读入”printf 格式说明符并将其与以下参数的数据类型相匹配的新奇 编译器,可能是在线编译器可能(也可能不)能够报告此类型不匹配并发出警告。这可能是您想要研究的内容。
关于c - %d 无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73915354/