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
Что не так делаю? Уже глаза видимо замылились не вижу проблему
Ух, это где такие задания
на работе
Проговори вслух что ты делаешь по шагам, опиши алгоритм. Не ясно, что за сдвиг влево от следующего байта и зачем он. Навскидку кажется, что нужно не byteArray[I+1], а то, что ты сдвинул в текущем байте.
переведите 11000001 в десятичную и поймите что оно не вмещается в byte
Вполне себе помещается (-63) , там проблема в том, что код нерабочий.
Тогда придется потом отсекать лидирующие единицы по идее
Зачем?
Зачем тогда писать, нужно получить 11000001? Если по итогу будет 11111111111111111111111111000001
Потому что результат будет в том же массиве байтов
Ну тогда, если такое норм, то нужно сделать правое вращение вместе с побитовым или
вот мне в другом чате скинули ссылку на 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; } используя данный метод все помещается
Есть другой чат по java?
а ты думал что только один существует?
Обсуждают сегодня