Как составить большой 64-разрядный номер из меньших 4 или 16-разрядных номеров

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

Я не совсем уверен, как на самом деле представлять это, но суть его заключается в следующем.

Скажем, у вас есть куча 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))
  }
}

javascript,integer,bit-manipulation,bit,

0

Ответов: 0

Как составить большой 64-разрядный номер из меньших 4 или 16-разрядных номеров

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

Я не совсем уверен, как на самом деле представлять это, но суть его заключается в следующем.

Скажем, у вас есть куча 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))
  }
}
00JavaScript, целое число, бит манипуляции, бит,
Похожие вопросы