我正在尝试从char数组转换为整数,并且atoi函数正常运行,除非当我在第一个索引中添加零时...没有打印出来
#include<iostream>
using namespace std;
int main()
{
char arr[]= "0150234";
int num;
num=atoi(arr);
cout << num;
return 0;
}
我希望输出0150234,但实际输出是150234
答案 0 :(得分:2)
我认为在atoi函数中,您已将字符串类型转换为整数,因此删除了0。您永远都不会在数字前打印0,因为这没有意义。 000001将始终表示为1。 我希望这可以消除您的疑问。
答案 1 :(得分:1)
二进制数表示形式(例如int
)不存储前导0,因为它们的数量是无限的。而是存储固定数量的位,其中可能有一些前导0位。
如有必要,您仍然可以打印前导0:
std::cout << std::setw(4) << std::setfill('0') << 1 << '\n';
输出:
0001
答案 2 :(得分:0)
您混淆了两个想法:
数字:这些是抽象的东西。它们是数量。您的计算机以您不关心的方式存储数字(尽管它可能是二进制的)。
表示形式:这些是我们向人类显示数字的方式,例如“ 150234” 或“ 0x24ADA” 或“十五万,二十三十四” 。当您转换为字符串时,可以选择一种表示形式。当流传输到std::cout
时,默认情况下会为您选择一个表示形式,但是您可以使用I / O操纵器选择自己的表示形式,例如Maxim shows。
变量num
是数字,而不是数字的表示。它不包含信息«将此显示为“ 0150234”»。这就是arr
提供的内容,因为它是一个包含数字表示形式的字符串。因此,如果原始表示形式中的前导零对您很重要,那么在打印num
时,您必须自己复制该表示形式。
通常,在编程世界中,尤其是在类似C的源代码中:
0x
)时,我们假定它是数字的十六进制(基数为16); 0
)时,我们假定它是数字的八进制(基数为8)。因此,如果您添加前导零,则可能会使用户感到困惑。
仅供参考,您电话号码的传统8进制表示为“ 0445332” 。