Я провел несколько примеров в книге "Разбивка книги для кодирования". В главе о манипуляции бит автор использовал следующее, чтобы создать все двоичное представление
int allOnes = ~0;
Мне просто интересно, почему мы просто не можем
int allOnes = -1;
Ты можешь. Попробуй и посмотри
System.out.println(Integer.toBinaryString(-1));
System.out.println(Integer.toBinaryString(~0));
System.out.println(~0);
Выход (как вы могли догадаться)
11111111111111111111111111111111
11111111111111111111111111111111
-1
Потому что ~0
- -1
. JLS -1 5.15.5. Побитовое приложение дополнения ~
говорит (частично),
Во время выполнения значение унарного поразрядного выражения дополнения является поразрядным дополнением к продвинутому значению операнда. Во всех случаях ~ x равно (-x) -1.