Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ int with preceding 0 changes entire value

Tags:

c++

variables

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 is 72. However when I remove the 0 at the front so that int time = 110; the console then displays 110 like expected.

Two things I'd like to know, first of all why it does this with a preceding 0 at the start of the int and is there a way to stop it so that 0110 at least equals 110?
Secondly is there any way to keep it so that 0110 returns 0110?
If you take a crack guess at the variable name I'm trying to do operations with 24hr time, but at this point any time before 1000 is causing problems because of this.

Thanks in advance!

like image 224
SteppingHat Avatar asked Mar 29 '15 05:03

SteppingHat


1 Answers

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 <iostream>
#include <iomanip>

int main() 
{
    std::cout << std::oct << 72 << std::endl;

    return 0;
}

The output is

110
like image 109
Vlad from Moscow Avatar answered Sep 30 '22 20:09

Vlad from Moscow