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;