Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;非法数字,简单问题_C++ - Fatal编程技术网

C++ C++;非法数字,简单问题

C++ C++;非法数字,简单问题,c++,C++,我遇到了以下错误: int temp = 0789; error C2041: illegal digit '8' for base '8' 因为我能理解的是,编译器理解任何以0开头的数字,比如0123,都是八进制的。但是我怎么能告诉编译器把0放在前面呢?如果你把0放在前面,它会认为它是一个八进制值,因此8和9是非法数字。把0放在数字的前面会告诉编译器值是用八进制表示的;八进制数字仅为0到7,因此“789”不是有效的八进制数字。这里唯一的解决方案是从数字的开头删除0(假设您希望数字是十进制的

我遇到了以下错误:

int temp = 0789;

error C2041: illegal digit '8' for base '8'

因为我能理解的是,编译器理解任何以0开头的数字,比如0123,都是八进制的。但是我怎么能告诉编译器把0放在前面呢?

如果你把0放在前面,它会认为它是一个八进制值,因此8和9是非法数字。

把0放在数字的前面会告诉编译器值是用八进制表示的;八进制数字仅为0到7,因此“789”不是有效的八进制数字。这里唯一的解决方案是从数字的开头删除0(假设您希望数字是十进制的)。。。。或者提供一个有效的八进制数(如果您真的想使用八进制)

好吧,我想你可以这样做:

int temp = atoi("0789");  
但这将是相当低效的,因为值将在运行时从字符串计算,而不是直接编译。

这方面的资源非常丰富

0xff是十六进制 0123是八进制 123u未签名
…更多…

如果您想显示前面有零的数字,只需执行以下操作:

int temp = 789;
std::cout << '0' << temp;
int-temp=789;

你为什么必须在前面放一个0?它不会改变数字的显示方式。你不能“告诉”编译器我害怕。(想象一下解释代码时可能会出现的混乱…)您需要去掉前导0,就这么简单。@superver10:您的意思是希望它在输出中显示,前面有一个0吗?@superver10:
int
(以及其他类似的数字类型)不存储前导零。它们存储数值。带或不带前导零的789的数值是完全相同的。准确地说:计算机使用二进制。也就是说,789是
0000001100010101
(如果
int
是16位,则前导零更多)。
int temp = 789;
std::cout << std::setw(4) << std::setfill('0') << temp;