如何在较小的4位或16位数字中组成一个较大的64位数字

时间:2018-08-25 20:33:14

标签: javascript integer bit-manipulation bit

想知道如何获取代表较大数字的较小数字的数组,并将其转换为较大的数字,反之亦然。

我不确定如何实际表示,但是要点如下。

假设您有一堆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))
  }
}

0 个答案:

没有答案