C++中使用前导零初始化整数出现意外结果的原因探究
关于C++中带前导零整数的解析问题
咱们逐个解答你的疑问:
1. C++中带前导零的整数会被当作八进制存储吗?
当然会!这是C++的标准规定:只要整数字面量以0开头(不是0x/0X这种十六进制前缀),编译器就会把它解析为八进制整数。
你代码里的int num = 0031;,0031是八进制数,转成十进制就是3*8 + 1 = 25,所以打印出来是25,这完全是符合规则的正常表现,不是程序出错啦。
2. 为什么用cin输入0031能得到正确的31?
这是因为cin默认采用十进制解析规则,它不会把输入内容里的前导零当成八进制的标识。
当你输入0031时,cin会自动忽略前面的无效前导零,只把后面的31按照十进制来转换存储,所以最终得到的就是31。
要是你想让cin把带前导零的输入当作八进制解析,也可以手动设置输入流的基数,比如改成这样:
cin >> oct >> num;
这时候输入0031,就会被解析成八进制的25啦。
内容的提问来源于stack exchange,提问作者AngelosFr
相关产品推荐
相关产品推荐

