2014-11-19 8 views
-1

У меня есть следующий код на Java, но он переполняется, когда это не должно. Зачем?Моя программа не работает должным образом

public classO { 
    public static void main(String[] args) { 
     int big = Integer.MAX_VALUE; 
     System.out.println("big = " + big); 
     long bigger = big + 2; 
     System.out.println("bigger = " + bigger); 
    } 
} 

я получаю этот выход:

big = 2147483647 
bigger = -2147483647 

Почему это переполнение? Я определил больше как длинный. Что не так?

+0

Вы можете найти лучший заголовок (более конкретное описание вашей проблемы). – Joop

+0

Сначала он выполняет добавление целого числа (ассоциативность = от R до L), а затем назначает длинные. Вы можете набрать текст и использовать этот оператор как длинный более крупный = (длинный) большой + 2; – SMA

+0

@Sempliciotto: Пожалуйста, подумайте о том, чтобы принять ответ, щелкнув галочку ниже пунктов голосования, если он исправит вашу проблему. Также проверьте свои другие вопросы, если вы можете принять и ответить. Это показывает другим пользователям, что ваша проблема решена. На все ваши вопросы есть ответы, но вы их никогда не принимали. – Simulant

ответ

3

big+2 переливается, как велика макс. значение в то время как (long) big не

long bigger = (long) big +2 

будет работать для вас, как он будет относиться к большой, как долго вместо целого.
Итак, сделайте бросок поплавка.

4

big + 2 - целочисленная операция и приводит к вашему переполнению (сначала вы добавляете два целых числа, а затем вы бросаете их на long, но в точке castig переполнение уже произошло).

использовать следующий код, чтобы создать длинную операцию Отдавая свой int перед операцией добавления:

long bigger = (long) big + 2L; 
Смежные вопросы