C++ int with preceding 0 changes entire value

后端 未结 4 870
春和景丽
春和景丽 2020-11-30 15:49

I have this very strange problem where if I declare an int like so

int time = 0110;

and then display it to the console the value returned i

4条回答
  •  感情败类
    2020-11-30 15:54

    An integer literal that starts from 0 defines an octal integer literal. Now in C++ there are four categories of integer literals

    integer-literal:
        decimal-literal integer-suffixopt
        octal-literal integer-suffixopt
        hexadecimal-literal integer-suffixopt
        binary-literal integer-suffixopt
    

    And octal-integer literal is defined the following way

    octal-literal:
        0 octal-literal
        opt octal-digit
    

    That is it starts from 0.

    Thus this octal integer literal

    0110
    

    corresponds to the following decimal number

    8^2 + 8^1 
    

    that is equal to 72.

    You can be sure that 72 in octal representation is equivalent to 110 by running the following simple program

    #include 
    #include 
    
    int main() 
    {
        std::cout << std::oct << 72 << std::endl;
    
        return 0;
    }
    

    The output is

    110
    

提交回复
热议问题