我有这个非常奇怪的问题,如果我声明一个像这样的
int time = 0110;
然后将其显示到控制台,返回的值为72
。但是当我删除前面的0以便int time = 110;
控制台显示110
时就像预期的那样。
我想知道的两件事,首先是为什么它在int的开头用前面的0做这个,并且有办法阻止它,以便0110
至少等于{ {1}}?第二,有没有办法保留110
返回0110
?
如果你对变量名称进行了一次猜测,我试图用24小时的时间进行操作,但此时1000之前的任何时间都会因此造成问题。
提前致谢!
答案 0 :(得分:3)
从0开始的整数文字定义八进制整数文字。现在在C ++中有四类整数文字
integer-literal:
decimal-literal integer-suffixopt
octal-literal integer-suffixopt
hexadecimal-literal integer-suffixopt
binary-literal integer-suffixopt
八进制整数文字的定义方式如下
octal-literal:
0 octal-literal
opt octal-digit
即从0开始。
因此这个八进制整数文字
0110
对应于以下十进制数
8^2 + 8^1
等于72
。
通过运行以下简单程序,可以确保八进制表示中的72等于110
#include <iostream>
#include <iomanip>
int main()
{
std::cout << std::oct << 72 << std::endl;
return 0;
}
输出
110
答案 1 :(得分:1)
开头为零表示数字为八进制。没有它是十进制。
答案 2 :(得分:1)
编译器将前导零解释为八进制数。八进制值“110”是十进制的72。如果你只是存储一个int值,就不需要前导零。
您正试图存储时钟上显示的“时间”。这实际上比简单的int更复杂。您可以存储自午夜以来的分钟数。
答案 3 :(得分:1)
这是因为整数文字。在数字前放置0
表示其八进制数。对于二进制,它是0b
,对于十六进制,它是0x
或0X
。您无需为小数写任何东西。参见下面的代码。
#include<stdio.h>
int main()
{
int binary = 0b10;
int octal=010;
int decimal = 10;
int hexa = 0x10;
printf("%d %d %d %d\n", octal, decimal, hexa, binary);
}
有关更多信息,请访问tutorialspoint。