2014-09-17 2 views
3

Хотя я не новичок в java, я наблюдал это своеобразное поведение на днях. Я обновлял свои основы, запуская код, состоящий из основных арифметических операций. Теперь согласно java (и основным правилам арифметики), -ve * -ve ИЛИ -ve/-ve - это номер +ve.Странное поведение при делении -ve int/-ve int, в java

Но составление этого источника: -

int b = Integer.MIN_VALUE/-1; 
System.out.println("b: " + b); 

дает мне выход: -

B: -2147483648

Что -ve, Может кто-нибудь указать мне, что случилось? Я знаю, что это маленькая вещь, которую я не могу заметить.

+5

'' '-2147483648/-1''' =>' '' 2147483648''' => Переполнение => '' '-2147483648''' –

+0

@MateuszDymczyk Это ответ – Maroun

+0

по теме: HTTP: // StackOverflow. com/questions/9397475/why-integer-max-value-1-integer-min-value – Maroun

ответ

10

Чтобы разделить на -1, то же самое, что и отрицание числа.

Поскольку диапазон целых чисел (-2147483648 до 2147483647) 1 больше по величине на отрицательной стороне -Integer.MIN_VALUE равна Integer.MAX_VALUE+1, который перетекает обратно в Integer.MIN_VALUE.

System.out.println(Integer.MIN_VALUE == -Integer.MIN_VALUE); // prints 'true' 
+1

Хороший ответ, спасибо! –

2

У вас переполнение. В спецификации java знак не гарантируется при переполнении.

Переполнение происходит из-за того, что

Integer.MIN_VALUE = -2147483648; 
Integer.MAX_VALUE = 2147483647; 

так -2147483648 * (- 1) 2147483648, которая находится над значением макс.

Смежные вопросы