Операторы сдвига и побитовое НЕ JAVA

233
03 декабря 2017, 13:02

Опыты ставились над переменной int number.
К двоичному виду приводил при помощи Integer.toBinaryString(number);

Пример #1: Операторы сдвига

Теория:
10001010 - значение
10001010>>1
11000101 - результат

Практика:
1111111111111111111111101111010 значение
1111111111111111111111101111010>>1
1111111111111111111111110111101 ожидание
111111111111111111111110111101 реальность

Пример #2: побитовое НЕ(NOT)

Теория:
~00001001 -выражение
00001001 -значение
11110110 -результат

Практика:
~1111111111111111111111111111111 выражение
1111111111111111111111111111111 значение
000000000000000000000000000 ожидание
1000000000000000000000000000 реальность

Что я делаю не так?

Answer 1
Практика:
1111111111111111111111101111010 значение
1111111111111111111111101111010>>1
1111111111111111111111110111101 ожидание
111111111111111111111110111101 реальность

откуда в вашем ожидании появилась новая единица слева?

При выполнении сдвига вправо старшие (расположенные в крайних левых позициях) биты, освобожденные в результате сдвига, заполняются предыдущим содержимым старшего бита.

источник

Поскольку у вас отображено 31 бит, значит 32 бит равен нулю, и при сдивге вправо именно он сдвигается и снова не отображается. А его место так же занимает ноль

Практика:
~1111111111111111111111111111111 выражение
1111111111111111111111111111111 значение
000000000000000000000000000 ожидание
1000000000000000000000000000 реальность

int содержит 4 байта по 8 бит = 32 бита.

В вашем случае "выражение" содержит 31 единицу, и 1 невидимый ноль в начале (java не выводит нули в начале).

Соответственно когда вы 31 единицу перевернули, так же перевернулся и первый бит, который в выражении равен нулю.

В итоговом выражении первый ноль стал единицей, а все единицы стали нулями.

READ ALSO
Как сохранить строковый массив?

Как сохранить строковый массив?

Пусть у меня есть массив testКак мне сделать так, чтобы он сохранялся в sharedPreferences при выходе из программы и загружался при входе?

203
Ключ шифрования не подходит

Ключ шифрования не подходит

Загружаю ключ из памяти телефона, декодирую из base64 в byte, получаю ключ и дальше уже работаю с нимНо при запуске программа выдает ошибку

152
Серверная часть для android-приложения на Java?

Серверная часть для android-приложения на Java?

Добрый день, уважаемые разработчикиСтолкнулся с задачей выбора способа реализации серверной части для android-приложения

173