добавление двоичных значений целых чисел, считанных из массива

#java #arrays #binary #byte #base

#java #массивы #двоичный #байт #основание

Вопрос:

У меня есть массив целых чисел.Я считываю каждое значение, используя цикл for. Теперь я хочу добавить двоичный код каждого значения и получить десятичную дробь добавленного двоичного файла.

например.

массив => 01 05
двоичный файл=> 00000001 00000101
добавленный двоичный файл => 0000000100000101, который дает десятичное число 261.

Как мне это сделать?

пожалуйста, помогите.

Комментарии:

1. Это своего рода неэффективный способ вычисления базовых значений 256. Это домашнее задание?

2. нет, это не домашнее задание …. у меня есть некоторый массив, в котором первые два байта задают размер остальных полезных значений.

3. Размер оставшихся значений? Тогда вы не хотите возиться со слиянием двоичных строк вместе. Это звучит как кадрирование.

4. Я предполагаю, что это должно быть: «У меня есть массив из байтов «.

Ответ №1:

Поскольку это не домашнее задание, нет необходимости выполнять неэффективный промежуточный шаг «преобразования в двоичный» (целые числа в компьютерах уже хранятся в двоичном формате!)

 public class Testy {
    public static void main(String[] args) {
        int[] arr = new int[] { 1, 5 };
        int sum = 0;
        for (int i = 0; i < arr.length; i  ) {
            int val = arr[i];
            sum = (sum << 8)   val;
        }
        System.out.println("final: "   sum);
    }
}
  

И если вы собираетесь включить более 3 целых чисел, вы должны сделать sum a long вместо int , иначе вы можете получить переполнение.

Кстати, как ваш цикл for получает значения? Если он считывает отдельные байты и преобразует их в целые числа, возможно, имеет больше смысла считывать короткие или целые числа за один раз, хотя следите за порядком следования.

Комментарии:

1. Да, это более эффективно 🙂

Ответ №2:

 public class Testy {
    public static void main(String[] args) {
        int[] arr = new int[] { 1, 5 };
        StringWriter sw = new StringWriter();
        for (int i = 0; i < arr.length; i  ) {
            int val = arr[i];
            String s = String.format("s", Integer.toBinaryString(val));
            sw.append(s);
        }
        System.out.println("final: "   Integer.parseInt(sw.toString(), 2));
    }
}
  

Результат: 261. Надеюсь, это поможет 🙂

Комментарии:

1. Другой ответ работает лучше и эффективнее, вам было бы лучше использовать это 🙂

2. Я собираюсь научить вас кое-чему: D. Попробуйте это: измените формат на "s" и удалите заменяющую часть.