如果我在C中声明一个整数,如下所示:
int an_example = 000300;
我可以以某种方式从一个整数中“切断”前导零吗?我希望000300被解释为300。
答案 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);