从C中的整数中删除前导零

时间:2014-10-24 14:30:39

标签: c int decimal octal

如果我在C中声明一个整数,如下所示:

int an_example = 000300;  

我可以以某种方式从一个整数中“切断”前导零吗?我希望000300被解释为300。

5 个答案:

答案 0 :(得分:6)

如果在整数文字的开头写0,则表示数字为八进制。 300八进制等于192十进制,因此您将从此代码中获得值192。

使用键盘上的删除键剪掉前导零。

答案 1 :(得分:4)

000300

这是八进制常量。它可以更简洁地写成

0300

此值等于十进制值192。

如果您想要十进制数300,请写

300

但要明确0300 != 300

如果您需要更具体的内容,请尝试运行此程序。您现在应该能够预测其输出:

#include <stdio.h>

int main(void)
{
    printf("%d\n", 000300);
    printf("%d\n", 0300);
    printf("%d\n", 300);
    return 0;
}

答案 2 :(得分:3)

重要的是要理解数字可以用C中的四个常用表示来表示。二进制,八进制,十进制和十六进制。

例如:

二进制(基数2):

0b100101100 //二进制300,前导0b一起告诉编译器一个二进制值(并非所有编译器都支持这个)。

Octal(base 8)

0300 //这是十进制的192。前导0告诉编译器值为八进制。

十六进制(基数为16)

0x12C //十进制300。前导0x告诉编译器值为十六进制。

您的电话号码: 000300是一个八进制数字,以十进制表示192,因为你有一个前导0.注意多余的前导零不会影响该值。

关于你的问题:不,你不能包含前导零并让编译器将值解释为十进制。

答案 3 :(得分:2)

为显示格式化整数的方式完全独立于初始化它的方式。

(顺便说一下,整数常量的前导0表示它被解释为八进制数。)

答案 4 :(得分:2)

  

我可以以某种方式从一个整数中“切断”前导零吗?我希望000300被解释为300。

整数总是具有相同的内部表示 - 您不必担心格式化问题,如前导零。正如@BasileStarynkevitch在注释中指出的,整数常量中的前导0使编译器将数字解释为八进制或基数8.如果从您提供的代码中删除前导零,an_example将从300八进制(十进制192)变为300十进制(454八进制)。

如何显示 an_example是另一回事,是否完全取决于您使用的格式说明符。例如,如果要以八进制打印数字但没有前导0,则使用%o说明符:

printf("%o", an_example);

如果您想将其打印为十进制数字,请使用%d代替上面的%o

另一方面,如果你想用前导0打印它来表示八进制,你会写:

printf("%#o", an_example);