Єдина intцінність, для якої вона працює, - це Integer.MIN_VALUE.
Це тому, що цілі числа заперечуються, використовуючи спосіб доповнення двох .
Використання
System.out.println(Integer.toBinaryString(Integer.MIN_VALUE));
ви бачите, що Integer.MIN_VALUEце
10000000000000000000000000000000
Прийняття від'ємного значення здійснюється спочатку заміною 0і 1, що дає
01111111111111111111111111111111
і додаючи 1, що дає
10000000000000000000000000000000
Як ви бачите за посиланням, яке я дав, у Вікіпедії згадується проблема з найбільш негативними цифрами, і зазначено, що це єдиний виняток:
Найбільш негативне число у доповненні двох іноді називають "дивним числом", оскільки воно є єдиним винятком.
Звичайно, у вас те саме явище, Long.Min_Valueякщо ви зберігаєте його в longзмінній.
Зауважте, що це пов'язано лише з вибором, який було зроблено стосовно двійкового зберігання вкладень на Java . Іншим (поганим) рішенням можна було, наприклад, відмовитись, просто змінивши найзначніший біт і залишивши інші біти незмінними, це дозволило б уникнути цієї проблеми з MIN_VALUE, але зробило б 2 різні 0значення та складну двійкову арифметику (як би ви мали збільшується, наприклад?).