Опыты ставились над переменной int number.
К двоичному виду приводил при помощи Integer.toBinaryString(number);
Пример #1: Операторы сдвига
Теория:
10001010 - значение
10001010>>1
11000101 - результат
Практика:
1111111111111111111111101111010 значение
1111111111111111111111101111010>>1
1111111111111111111111110111101 ожидание
111111111111111111111110111101 реальность
Пример #2: побитовое НЕ(NOT)
Теория:
~00001001 -выражение
00001001 -значение
11110110 -результат
Практика:
~1111111111111111111111111111111 выражение
1111111111111111111111111111111 значение
000000000000000000000000000 ожидание
1000000000000000000000000000 реальность
Что я делаю не так?
Практика:
1111111111111111111111101111010 значение
1111111111111111111111101111010>>1
1111111111111111111111110111101 ожидание
111111111111111111111110111101 реальность
откуда в вашем ожидании появилась новая единица слева?
При выполнении сдвига вправо старшие (расположенные в крайних левых позициях) биты, освобожденные в результате сдвига, заполняются предыдущим содержимым старшего бита.
источник
Поскольку у вас отображено 31 бит, значит 32 бит равен нулю, и при сдивге вправо именно он сдвигается и снова не отображается. А его место так же занимает ноль
Практика:
~1111111111111111111111111111111 выражение
1111111111111111111111111111111 значение
000000000000000000000000000 ожидание
1000000000000000000000000000 реальность
int содержит 4 байта по 8 бит = 32 бита.
В вашем случае "выражение" содержит 31 единицу, и 1 невидимый ноль в начале (java не выводит нули в начале).
Соответственно когда вы 31 единицу перевернули, так же перевернулся и первый бит, который в выражении равен нулю.
В итоговом выражении первый ноль стал единицей, а все единицы стали нулями.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости