前面的0的C ++ int更改整个值

时间:2015-03-29 05:08:00

标签: c++ variables

我有这个非常奇怪的问题,如果我声明一个像这样的

int time = 0110;

然后将其显示到控制台,返回的值为72。但是当我删除前面的0以便int time = 110;控制台显示110时就像预期的那样。

我想知道的两件事,首先是为什么它在int的开头用前面的0做这个,并且有办法阻止它,以便0110至少等于{ {1}}?第二,有没有办法保留110返回0110? 如果你对变量名称进行了一次猜测,我试图用24小时的时间进行操作,但此时1000之前的任何时间都会因此造成问题。

提前致谢!

4 个答案:

答案 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,对于十六进制,它是0x0X。您无需为小数写任何东西。参见下面的代码。

#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