Как вы знаете, двоичный литерал - это новая функция, представленная в Java 7:
int x = 0b1011;
System.out.println(x); // prints 11 as expected
Но когда я попытался получить максимальное число из двоичного литерала, я получил -1
!!!
int x = 0b11111111111111111111111111111111;
System.out.println(x); // prints -1 !!!
Дальнейшие детали:
System.out.println(Integer.MAX_VALUE);
System.out.println(0b1111111111111111111111111111111); // 31 bits
/* Both print 2147483647 */
/************************************************************************************/
System.out.println(Integer.MIN_VALUE);
System.out.println(0b10000000000000000000000000000000); // 32 bits (increment by 1)
/* Both print -2147483648 */
/************************************************************************************/
// And if you keep increasing the binary literal, its actual value
// will be decreased until you reach the maximum binary literal and
// its actual value will be -1.
System.out.println(0b11111111111111111111111111111111); // 32 bits
/* Prints -1 */
Как видите, фактическое значение литерального двоичного числа (в то время как приращение) скачетот максимального значения int
до минимального, а затем продолжайте уменьшаться, пока не достигнет -1, что является максимальным значением двоичного литерала.
Это ошибка?или это как-то связано со знаковыми / беззнаковыми числами?