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 ответов

21 просмотр

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

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?

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта