Задачка про минимальное целое

Jun 13, 2007 04:21

Без запуска нижеприведённого кода надо сказать, что будет выведено в консоль, если Integer.MIN_VALUE == -2147483648. :)

1 public class Infinity
2 {
3 public static void main( String[] args ) {
4 System.out.println(" MinIntValue => "
5 + Integer.MIN_VALUE);
6 System.out.println("-MinIntValue => "
7  + ( Read more... )

интересные факты, java, задачка, мудрость

Leave a comment

Comments 6

nornad June 12 2007, 23:21:54 UTC
Если никто не ответит, напишу в субботу.

Reply


anonymous June 13 2007, 03:50:42 UTC
отвечать будет polonezzz? :)

мои соображения таковы. старший байт - знаковый

следовательно так как
10000000000000000000000000000000 = 214748364 (вычислено в calc.exe без запуска исходника:))
должно вывестись НОЛЬ ( а флаг OF будет равен 1 типа произошло переполнение) если до всего этого какой-нить Exception не вылезет.

Reply

nornad June 13 2007, 04:01:58 UTC
Чего-то у тебя число на калькуляторе не то вышло:
10000000 00000000 00000000 00000000bin = 80 00 00 00hex = 128 * 256 * 256 * 256dec = 2147483648dec.
Хотелось бы услышать ход твоих мыслей, на котором основано решение.

Reply


eugeneos June 13 2007, 19:48:09 UTC
MIN_VALUE => -2147483648
-MIN_VALUE == 2147483647

Reply

(The comment has been removed)

nornad June 13 2007, 19:57:35 UTC
Логика ясна, но ответ (то, что выведется) неверный.
Думаю, вряд ли кто сможет догадаться, т.к. подобное поведение с++, ассемблеру, паскалю и иже с ними не присуще. Посему даю правильный ответ уже сегодня:

MIN_VALUE => -2147483648
-MIN_VALUE => -2147483648

Всё дело в волшебных пузырьках. :)
Дело в том, что для минвалю нет соответсвующего положительного значения. Поэтому смена знака отменяется.
Вот такая вот интересная фишка в жабе: Integer.MIN_VALUE == -Integer.MIN_VALUE :)
Кстати, если не делать функцию negate, а сразу менять знак у минвалю, то IDEA, например, ругается.

Reply

eugeneos June 13 2007, 19:50:58 UTC
т.к. ~0x00 = 0xFF, т.е. -1, 0x7F = 127, ~0x7F = 0x80 = -128, то и тут соответсвенно( учитывая что минвалю уже отрицательное)

Reply


Leave a comment

Up