2015-06-22 2 views
4

Вот код в Java на типы данных:Числовые литералы в Java - восьмеричные?

class Test 
{ 
    public static void main(String args[]) 
    { 
     int i = -0777; 
     System.out.println(i); 
    } 
} 

Выход выше код -511

Если код будет изменен на:

class Test 
{ 
    public static void main(String args[]) 
    { 
     int i = -777; 
     System.out.println(i); 
    } 
} 

Выход -777 ,

Почему выходной отличается? Каковы расчеты, выполненные за этим кодом?

+0

Я бы поднял этот вопрос, но название слишком общее и неспецифическое. – SamTebbs33

+0

Этот вопрос не имеет ничего общего с типами данных. Речь идет о числовых литералах. – EJP

ответ

8

-0777 обрабатывается компилятором как восьмеричное число (основание 8), десятичное значение которого -511 (- (64 * 7 + 8 * 7 + 7)). -777 - десятичное число.

+0

Что произойдет, если я буду вводить «-077» через STDIN? – Rishav

+1

@RishavKundu "-077" - это строка. Существует множество способов интерпретации и анализа. – Kayaman

+0

@RishavKundu Это будет зависеть от того, как вы читаете его у STDIN. Например - «Сканер sc = новый сканер (System.in); System.out.println (sc.nextInt()); 'будет печатать -77, если вы введете -077. – Eran