c - %d 无符号整数

标签 c unsigned-integer

我不小心使用了“%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/

相关文章:

c# - 从 C# .Net Core 项目正确调用外部 C 库方法*在 Linux 上*

c++ - const 静态数组的条件编译

c++ - qbytearray.at() 到 unsigned int

c - 在C中添加unsigned long和int

c - 有没有更好的方法来排序浮点操作数?

java - 多线程实现——java和C的优缺点

c - 从 C 语言在 AutoCAD 中画一个圆

c - 将一种类型转换为另一种 C 类型的类型转换警告

c - 当 C 中需要 unsigned int 时,将字符串传递给函数

c++ - 为什么编译器不为 size_t 的负值生成警告?