Why int j = 012 giving output 10?

前端 未结 4 1689
抹茶落季
抹茶落季 2020-11-30 11:15

In my actual project It happened accidentally here is my modified small program.

I can\'t figure out why it is giving output 10?

pub         


        
相关标签:
4条回答
  • 2020-11-30 12:03

    The leading zero means the number is being interpreted as octal rather than decimal.

    0 讨论(0)
  • 2020-11-30 12:11

    Than I change 012 to 0123 and now it is giving output 83?

    Because, it's taken as octal base (8), since that numeral have 0 in leading. So, it's corresponding decimal value is 10.

    012 :

    (2 * 8 ^ 0) + (1 * 8 ^ 1) = 10
    

    0123 :

    (3 * 8 ^ 0) + (2 * 8 ^ 1) + (1 * 8 ^ 2) = 83
    
    0 讨论(0)
  • 2020-11-30 12:13

    You are assigning a constant to a variable using an octal representation of an type int constant. So the compiler gets the integer value out of the octal representation 010 by converting it to the decimal representation using this algorithm 0*8^0 + 1+8^1 = 10 and then assign j to 10. Remember when you see a constant starting with 0 it's an integer in octal representation. i.e. 0111 is not 1 hundred and 11 but it's 1*8^0 + 1*8^1 + 1*8^2.

    0 讨论(0)
  • 2020-11-30 12:18

    If a number is leading with 0, the number is interpreted as an octal number, not decimal. Octal values are base 8, decimal base 10.

    System.out.println(012):
    (2 * 8 ^ 0) + (1 * 8 ^ 1) = 10
    12 = 2*8^0 + 1*8^1 ---> 10
    
    
    System.out.println(0123)
    (3 * 8 ^ 0) + (2 * 8 ^ 1) + (1 * 8 ^ 2) = 83
    123 = 3*8^0 + 2*8^1 + 1*8^2 ---> 83
    
    0 讨论(0)
提交回复
热议问题