Я написал простой метод на Java для преобразования десятичного числа в его 8-битное двоичное представление. Однако для некоторых чисел он возвращает 7 бит вместо 8 бит, но для других чисел он работает отлично.
Я пытался понять это в течение 2 часов, и безрезультатно исследовал этот сайт. Любая помощь приветствуется. Спасибо!
public static void convertBinary(int n) {
int[] arr = new int[8]; //initialized to hold 8 bit places
int counter = 0;
String binary = "";
while(n > 0) {
arr[counter] = n % 2;
n /= 2;
counter++;
}
for(int i = counter; i >= 0; i--) {
binary = "" + arr[i];
System.out.print(binary);
}
}
Когда я вызываю convertBinary (125), я получаю 01111101, что является правильным 8-битным представлением.
Однако, когда я называю его convertBinary (32), я получаю 0100000, в котором отсутствует 1 бит. Результат, который я хочу, - 00100000.
Я думал, что инициализация массива из 8 размеров поможет с заполнением 0 спереди, но по какой-то причине это не работает. Я здесь и снова нахожусь на грани остроумия, любая помощь приветствуется. Спасибо!
@KevinAnderson Мне пришлось сделать декрементированный цикл, чтобы перевернуть числа, поскольку первый цикл while дает обратный результат
Поскольку в вашем массиве всегда 8 элементов, почему бы не начать с 7 до 0? Нравится for (int I = 7; I >= 0; --I) {}
@Ivan Вот и все! Однако мне интересно, есть ли лучшее решение (чтобы избежать магического числа 7)
arr.length - 1, поскольку в Java массивы отсчитываются от нуля, индекс последнего элемента рассчитывается как длина массива минус 1.
@ Иван, спасибо, все отлично сработало. Кроме того, быстрый вопрос, поскольку я только что кое-что заметил, в моем коде я использовал i - а в вашем фрагменте вы использовали --i. это просто вопрос предпочтений или есть разница между ними?
Разница есть, но не имеет значения в этом конкретном контексте. Это не значит, что вы можете просто заменить --i и i-- в других контекстах, хотя ...




Вы выполняете итерацию из количества бит в данном числе 32, которое имеет только 6 бит. если вам нужны все 8 бит, выполните итерацию, начиная с длины бит, равной 8.
public static void convertBinary(int n) {
int length = 8;
int[] arr = new int[length]; //initialized to hold 8 bit places
int counter = 0;
String binary = "";
while(n > 0) {
arr[counter] = n % 2;
n /= 2;
counter++;
}
for(int i = length - 1; i >= 0; i--) {
binary = "" + arr[i];
System.out.print(binary);
}
}
Почему бы в последнем цикле просто не распечатать все 8 бит вместо того, чтобы начинать с
counter?