在创建带前导零的整数,如何动C呢?是它为不同的版本的C不同?

在我的情况下,他们似乎只是被丢弃(但也许那是什么的printf呢?):

#include <stdio.h>

int main() {
    int a = 005;
    printf("%i\n", a);
    return 0;
}

我知道我可以用printf与0垫,但我只是想知道这是如何工作的。

有帮助吗?

解决方案

前导零指示的数目中所表示的八进制或基座8;因此,010 = 8。添加额外的前导零没有影响;正如你所期望的数学,X + 0 * 8 ^ N = X;有通过使其表示更长的到的值没有变化。

一个地方,你经常会看到这样的UNIX文件方式; 0755实际上意味着7 * 8 ^ 2 + 5 * 8 + 5 = 493;或与使用umasks如0022 = 2 * 8 + 2 = 10。

atoi(nptr)被定义为等同于strtol(nptr, (char **) NULL, 10),不同之处在于它不检测错误 - 正因为如此,atoi()总是使用小数(并因此忽略前导零)。 strtol(nptr, anything, 0)执行以下操作:

  

的字符串可以被任意的开始   的空白空间的量(如确定   通过isspace(3)随后)由单一   可选'+''-'迹象。如果基地   零或如图16所示,串然后可以   包括"0x"前缀,而且数量   将在底座16被读取;否则,   零基被取为10(十进制)   除非下一个字符'0',在   这种情况下,取为8(八进制)。

因此,使用相同的规则与C编译器。

其他提示

注意!

在此语句005是一个八进制常数。

int a = 005;

在这种情况下,也没有关系,因为单个位的八进制常数具有相同的值作为等效的十进制恒定的,但在C:015 != 15

无论文字的整数在八进制,十进制和十六进制表示,一旦它是由编译器解析它只是当作一个值。如何的整数是经由printf输出仅取决于其类型,其值与所述格式说明(和活性区域)。

这是一个前导零表示数字是八进制的事实是什么,往往被遗忘。我已经看到了造成混乱几次,如使用一个不错的,常规格式的八位组,当有人试图输入的IP地址:

192.168.010.073

和解析器解释的最后2个字节为八进制数字。

比C的不幸使用前导零,使一些八进制更糟糕的唯一事情是JavaScript的处理的前导零的有时的做了一些八进制(数量为八进制,如果的数字,其余都是OK - 不到8 - 十进制其他)。在Javascript中,(017 == 15)(018 == 18)

我宁愿有是一个错误;其实我宁愿完全放弃的八进制的支持。至少使用更在你的脸上的前缀,如可能

0t10  (ocTal 8)
0k17  (oKtal 15)

但我大约35年太久下旬我的建议。

具有前导零的许多装置中C.所以011 == 9 == 0x9的所有版本的八进制编码。

八路是基于(十进制而不是10或16进制)8的编号系统。所以011 == 1*8 + 1, 013 == 1*8 + 3

您应该尝试:

int a = 5;
printf("%03i\n", a);

0表示 “垫用零”,3是输出的期望的长度。

编辑:对不起,我读过你的问题得太快 - 现在我明白你问的东西完全不同。不过我会就是离开这一点,因为它可能是别人有帮助的。

与领先0一个数字表示,该数量是一个八进制号。这就是所谓的整数常量。您还可以使用0b用于表示的二进制数的,为的的十六进制数的是0x0X。你并不需要编写的小数任何事情的。看到代码波纹管。

#include<stdio.h>

int main()
{
    int binary = 0b10;
    int octal=010;
    int decimal = 10;
    int hexa = 0x10;
    printf("%d %d %d %d\n", octal, decimal, hexa, binary);
}

有关的更多信息,请浏览 tutorialspoint

整数不必“前导零” 5是5,你可能会写它的字符串表示与领先的0,如果您愿意,您有printf的改性剂。

<击>在特殊情况下,零正在printf的丢弃。 所有前导零被除外,其导致你的编译器把整数作为八进制初始零编译器剥离出来。对于005,无论是八进制和十进制表示是相同的,不应该打扰你,但尽管如此,它的自找麻烦,除非你专门意味着八进制表示。

前导零必须与整数的字符串表示纯粹做。与领先的零打印,使用“%03D”。这将确保的3字段长度。

在一般情况下,“% d”将打印宽的整数x的字符和意愿用前导空格。 “%0 d”将做同样的事情,但用前导零意愿垫。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top