我在 printf 语句中使用了以下代码。
void main()
{
int n=0102;
printf("%d", n);
}
这将打印 66 作为答案。我还将变量 n 的值更改为 012。它给出了答案 10。请帮助我了解如何完成此转换???
这是因为当数字(整数常量)的第一位是0
(并且第二位不能是x
or X
)时,编译器会将其解释为八进制数。打印它%d
会给你一个十进制值。
要打印八进制值,您应该使用%o
说明符
printf("%o", n);
整数常量以数字开头,但没有句点或指数部分。它可能有一个指定其基础的前缀和一个指定其类型的后缀。
十进制常量以非零数字开头,由一系列十进制数字组成。八进制常量由前缀 0 (可选地后跟仅由 0 到 7 的数字序列)组成。十六进制常量由前缀 0x 或 0X 后跟一系列十进制数字和字母 a(或 A)到 f(或 F)组成,值分别为 10 到 15。
1.十进制常量:不能以 .开头0
。
12 125 3546
2.八进制常量:必须以a开头0
。
012 0125 03546
3.十六进制常量:总是以0x
or开头0X
。
0xf 0xff 0X5fff
您告诉 printf 以十进制 (%d) 形式打印该值。使用 %o 以八进制打印。
任何以数字开头的数字文字0
都被视为八进制数。因此
0102 = (1 * 8^2) + (0 * 8^1) + (2 * 8^0) = 64 + 0 + 2 = 66
012 = (1 * 8^1) + (2 * 8^0) = 8 + 2 = 10
这里的问题是当您在 102 编译器将其视为八进制数之前使用 0 时。这是一条规则。当您使用 %d 打印数字时,它将八进制数转换为十进制数。这就是为什么你得到 66,它是八进制 102 的十进制形式。