在JavaScript中处理二进制/ Bitshifts

时间:2012-04-17 20:17:31

标签: javascript binary bit-manipulation

我正在尝试执行一些bithift操作并在JavaScript中处理二进制数。

这就是我想要做的。用户输入一个值,然后用它执行以下操作:

// Square Input and mod with 65536 to keep it below that value
var squaredInput = (inputVal * inputVal) % 65536;
// Figure out how many bits is the squared input number
var bits = Math.floor(Math.log(squaredInput) / Math.log(2)) + 1;
// Convert that number to a 16-bit number using bitshift.
var squaredShifted = squaredInput >>> (16 - bits);

只要数字大于46,就可以了。一旦小于46,它就不起作用。 我知道问题在于比特移位。现在来自C背景,我知道这将以不同的方式完成,因为所有数字都将以32位格式存储(假设它是int)。 JavaScript是否也这样做(因为var没有输入?)

如果是这样,是否可以存储16位数字?如果没有,我可以将其视为32位并进行所需的计算以假设它是16位吗?

注意:我试图在squaredInput中提取16位值的中间4位。

另一个注意事项:当打印出var时,它只打印出没有填充的值,所以我无法弄明白。尝试使用parseInttoString

由于

2 个答案:

答案 0 :(得分:1)

你在找这个吗?

function get16bitnumber( inputVal ){
   return ("0000000000000000"+(inputVal * inputVal).toString(2)).substr(-16);
}

此函数返回(inputVal*inputVal)值的最后16位。通过二进制字符串,您可以处理任何位范围。

答案 1 :(得分:0)

如果你不是必须的话,不要在JS中使用bithifting。 specs提到至少四种数字格式

  • IEEE 754
  • 的Int32
  • UInt32的
  • UINT16

知道在哪个时候使用它真的很混乱。

例如,~在转换为Int32时应用按位反转。 UInt16似乎只在String.fromCharCode中使用。使用bitshift运算符将操作数转换为UInt32或Int32。

在您的情况下,右移操作符>>> forces conversion to UInt32。 当您键入

a >>> b

这就是你得到的:

ToUInt32(a) >>> (ToUInt32(b) & 0x1f)
相关问题