为何输出不是00706?C++前置零整数输出异常问题
为什么C++中以0开头的整数输出不是带前导零的数字?
这事儿其实是C/C++的整数字面量规则在起作用——只要你给整数加了前缀0,编译器就会把它当成八进制数(基数为8)来处理,而不是你以为的带前导零的十进制数。
具体到你的代码:
你写的int a = 0706;,这里的0706是八进制数,转换成十进制的计算过程是这样的:
7 * 8² + 0 * 8¹ + 6 * 8⁰ = 7*64 + 0 + 6 = 448 + 6 = 454
所以变量a实际存储的是十进制的454,输出自然就是454了,不管你加多少个前导零,八进制的数值本质没变,转十进制还是454。
如果想要输出带前导零的数字怎么办?
如果你希望输出00706这种格式,得用输出格式控制来实现,比如:
- 用
printf的格式化输出:printf("Hello%05d\n", a); - 用C++的
cout配合格式操纵符:#include <iostream> #include <iomanip> // 需要包含这个头文件 using namespace std; int main() { int a = 706; // 这里用十进制就好 cout << "Hello" << setw(5) << setfill('0') << a << endl; }
这样就能输出带前导零的Hello00706了。
内容的提问来源于stack exchange,提问作者Ali Hasan
相关产品推荐
相关产品推荐

