169 похожих чатов

Ребят, помогите пожалуйста На входе получается вот такой массив 00000001, 00000010, 00000011,

00000100, 00000101
Нужно сделать сдвиг вправо на 2 (не циклический) и получить
вот такой
00000000, 01000000, 10000000, 11000001, 00000001

Вот так делаю, но получаю не то что нужно

byte[] byteArray = {1, 2, 3, 4, 5};
for (int i = 0; i < byteArray.length; i++) {
if ((i + 1) >= byteArray.length) {
byteArray[i] = (byte) ((byteArray[i] >>> shiftAmount));
} else {
byteArray[i] = (byte) ((byteArray[i] >>> shiftAmount) | (byteArray[i + 1] << (8 - shiftAmount)));
System.out.println(String.format("\t %8s", Integer.toBinaryString(byteArray[i + 1] << (8 - shiftAmount) & 0xFF)).replace(' ', '0'));
}
}
Вот что получается
10000000, 11000000, 00000000, 01000001, 00000001
Что не так делаю? Уже глаза видимо замылились не вижу проблему

13 ответов

23 просмотра

Ух, это где такие задания

Anton-Shtanko Автор вопроса

Проговори вслух что ты делаешь по шагам, опиши алгоритм. Не ясно, что за сдвиг влево от следующего байта и зачем он. Навскидку кажется, что нужно не byteArray[I+1], а то, что ты сдвинул в текущем байте.

переведите 11000001 в десятичную и поймите что оно не вмещается в byte

Dima
переведите 11000001 в десятичную и поймите что оно...

Вполне себе помещается (-63) , там проблема в том, что код нерабочий.

Alf
Вполне себе помещается (-63) , там проблема в том,...

Тогда придется потом отсекать лидирующие единицы по идее

Зачем?

Alf
Зачем?

Зачем тогда писать, нужно получить 11000001? Если по итогу будет 11111111111111111111111111000001

Dima
Зачем тогда писать, нужно получить 11000001? Если ...

Потому что результат будет в том же массиве байтов

Alf
Потому что результат будет в том же массиве байтов

Ну тогда, если такое норм, то нужно сделать правое вращение вместе с побитовым или

Anton-Shtanko Автор вопроса
Dima
переведите 11000001 в десятичную и поймите что оно...

вот мне в другом чате скинули ссылку на stackoverflow static byte[] shiftRight(byte[] byteArray, int shiftBitCount) { final int shiftMod = shiftBitCount % 8; final byte carryMask = (byte) (0xFF << (8 - shiftMod)); final int offsetBytes = (shiftBitCount / 8); int sourceIndex; for (int i = byteArray.length - 1; i >= 0; i--) { sourceIndex = i - offsetBytes; if (sourceIndex < 0) { byteArray[i] = 0; } else { byte src = byteArray[sourceIndex]; byte dst = (byte) ((0xff & src) >>> shiftMod); if (sourceIndex - 1 >= 0) { dst |= byteArray[sourceIndex - 1] << (8 - shiftMod) & carryMask; } byteArray[i] = dst; } } return byteArray; } используя данный метод все помещается

Anton-Shtanko Автор вопроса
Vanya
Есть другой чат по java?

а ты думал что только один существует?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта