printf 包含以 0 开头的数字“%d”(例如“0102”),给出意外的答案(例如“66”)

2024-01-15

我在 printf 语句中使用了以下代码。

void main()
{
    int n=0102;
    printf("%d", n);
}

这将打印 66 作为答案。我还将变量 n 的值更改为 012。它给出了答案 10。请帮助我了解此转换是如何完成的???


这是因为当数字(整数常量)的第一位数字为0(第二个不能是x or X),编译器将其解释为八进制数。打印它%d会给你一个十进制值。
要打印八进制值,您应该使用%o说明符

   printf("%o", n);  

6.4.4.1 整数常量:

  1. 整数常量以数字开头,但没有句点或指数部分。它可能有一个指定其基数的前缀和一个指定其类型的后缀。

  2. 十进制常量以非零数字开头,由十进制序列组成 数字。八进制常量由前缀 0 组成(可选地后跟一系列 仅限数字 0 到 7。十六进制常量由前缀 0x 或 0X 组成 由十进制数字和字母 a(或 A)到 f(或 F)以及值组成的序列 分别为 10 至 15。


整数常量:

1.十进制常数: Must not开始于0.

 12  125  3546  

2.八进制常数: 必须以 a 开头0.

 012 0125 03546  

3.十六进制常数: 总是以0x or 0X.

 0xf 0xff 0X5fff   
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

printf 包含以 0 开头的数字“%d”(例如“0102”),给出意外的答案(例如“66”) 的相关文章

随机推荐