为啥将 C++ 中的整数初始化为 010 与将其初始化为 10 不同?
Posted
技术标签:
【中文标题】为啥将 C++ 中的整数初始化为 010 与将其初始化为 10 不同?【英文标题】:Why is initializing an integer in C++ to 010 different from initializing it to 10?为什么将 C++ 中的整数初始化为 010 与将其初始化为 10 不同? 【发布时间】:2011-06-15 14:33:42 【问题描述】:当整数初始化为int a = 010
时,a
实际上设置为8,但对于int a = 10
,a
设置为10。
谁能告诉我为什么a
没有为int a = 010
设置为10?
【问题讨论】:
【参考方案1】:因为它将 010
解释为 八进制 格式的数字。在 base-8 系统中,数字 10
等于 base-10 中的数字 8
(我们的标准计数系统)。
更一般地说,在 C++ 世界中,在整数文字前加上 0
指定一个八进制文字,因此编译器的行为与预期完全一致。
【讨论】:
【参考方案2】: 数字前的0 表示它采用 octal 表示法。因此,由于八进制使用 8 为基数,因此 010 将等于 8。
同样,0x 用于hexadecimal 表示法,它使用 16 的基数。所以 0x10 将等于十进制的 16。
【讨论】:
【参考方案3】:在C
、C++
、Objective C
和相关语言中,0
前缀表示octal 字面常量,因此010
= 8
在十进制中。
【讨论】:
【参考方案4】:010 中以 0 开头表示该数字为八进制形式。所以 010 表示十进制的 8。
【讨论】:
以上是关于为啥将 C++ 中的整数初始化为 010 与将其初始化为 10 不同?的主要内容,如果未能解决你的问题,请参考以下文章
为啥当我将其大小初始化为 5 并且只给出 5 个元素时,向量的大小会增加到 10?