Как составить большое 64-битное число из меньших 4 или 16-битных чисел - PullRequest
0 голосов
/ 25 августа 2018

Хотите знать, как взять массив небольших чисел , представляющих большее число , и преобразовать его в это большее число, и наоборот.

Я не совсем уверен, какчтобы на самом деле представить это, но суть в следующем.

Скажем, у вас есть набор из 4-битных чисел:

[ 3, 2, 5, 13, 2, 8, 1, ... ]

Хотите знать, как рассчитать окончательное число.Не совсем уверен, что я имею в виду полностью, но я пытаюсь понять, что ... Я не хочу просто добавить числа:

3 + 2 + 5 + 13 + 2 + 8 + 1 = 34

И я не понимаюне хочу просто объединять биты.

00000011 + 00000010 + 00000101 + ...
(3)      + (2)      + (5)      + ...
=
000000110000001000000101

Вместо этого я хочу изменить следующий процесс.Скажем, у меня большое число, например 2147483650 (чуть больше, чем 32-разрядное целое число).Я хочу сохранить это целое число в массиве 4-битных кусков.Может быть, эти куски выглядят так:

[ 3, 2, 5, 13, 2, 8, 1, ... ]

Так что это главная цель.Как:

  1. Преобразовать большое число в массив меньших чисел.
  2. Как преобразовать массив маленьких чисел в одно большое число.

Но, может быть, большое целое число составляет 32 бита, а маленькое целое число составляет 2 бита, или, может быть, они 8-битные, и т. Д. В основном общий способ сказать:

function divideLargeIntoArrayOfSmall(integer, smallBitSize) {
  if (smallBitSize == 4) {
    return integer.splitIntoBitChunksOf(4)
  } else if (smallBitSize == 2) {
    return integer.splitIntoBitChunksOf(2)
  } else if (smallBitSize == 8) {
    return integer.splitIntoBitChunksOf(8)
  } else if (smallBitSize == 16) {
    return integer.splitIntoBitChunksOf(16)
  }
}

function composeIntoSingleLarge(array, itemBitSize) {
  if (itemBitSize == 4) {
    // array.sum(integerFromBitSize(4))
  } else if (itemBitSize == 2) {
    // array.sum(integerFromBitSize(2))
  } else if (itemBitSize == 8) {
    // array.sum(integerFromBitSize(8))
  } else if (itemBitSize == 16) {
    // array.sum(integerFromBitSize(16))
  }
}
...