从零开始的数字有什么特别之处?
这有点愚蠢的问题,但对我来说很有意思)
这就是我在visual studio 2013中获得的
int i = 07; // i == 7 int i = 16; // i == 16 int i = 00016; // i == 14, why? int i = 05016; // i == 2574, wow ) int i = 08; // compile error, compiler expects octal number...
如果number从零开始并且包含8,那就是编译错误。 这是正常的吗? 如果00016 == 14,那么编译器在启动零时究竟做了什么?
谢谢大家 ))
是的,这是预料之中的。
[C++11: 2.14.2/1]:
整数文字是一个没有句点或指数部分的数字序列。 整数文字可以具有指定其基数的前缀和指定其类型的后缀。 数字序列的词汇第一个数字是最重要的。 十进制整数文字( 十进制 )以0以外的数字开头,由一系列十进制数字组成。 八进制整数文字(基数为8)以数字0开头,由一系列八进制数字组成。 22 hex整数文字(十六进制 )以0x或0X开头,由一系列hex数字组成,包括十进制数字和字母a到f和A到F,十进制值为十到十五。 [例如:数字12可以写成12,014或0XC。 – 示例]22 数字8和9不是八进制数字。
以0
开头的整数文字是八进制数 ,非常类似于以0x
的数字是hex数。
八进制数字只能包含0
到7
的数字,这就是编译错误的原因。
以0
开头的整数文字是八进制文字。 因此,它们只能包含数字0-7。
(有趣的是,这包括文字0
本身。)
从0开始的数字使其成为八进制,因此数字8和9是非法的,而您的其他示例显示转换为十进制。