Javascript 按位或按大值

Javascript 按位或按大值,javascript,vbscript,asp-classic,bitwise-operators,Javascript,Vbscript,Asp Classic,Bitwise Operators,我需要对大数进行位运算 例如: 2 | 2147483648 我希望得到2147483650,但是得到-2147483646 为什么会这样,我能做些什么 请注意,我正在处理的代码是一些旧的javascript代码,在经典asp中在服务器端运行,我相信这是一个旧版本的js 您可以使用biginger.js库,只需稍加修改即可在服务器端js中使用经典ASP 要在经典asp中使用,请执行以下操作: 修改biginger.js库的第21行和第28行,使其在服务器端与经典ASP: 更改第21行: Big

我需要对大数进行位运算

例如:

2 | 2147483648

我希望得到
2147483650
,但是得到
-2147483646

为什么会这样,我能做些什么

请注意,我正在处理的代码是一些旧的javascript代码,在经典asp中在服务器端运行,我相信这是一个旧版本的js

您可以使用
biginger.js
库,只需稍加修改即可在服务器端js中使用经典ASP

要在经典asp中使用,请执行以下操作:

修改
biginger.js
库的第21行和第28行,使其在服务器端与经典ASP:

更改第21行:

BigInteger.prototype = Object.create(Integer.prototype);
致:

对第28行做同样的更改

然后,拆下最后4行。不需要它们:

// Node.js check
if (typeof module !== "undefined" && module.hasOwnProperty("exports")) {
    module.exports = bigInt;
}
然后在脚本中包含如下内容:

<script language="javascript" runat="server">

... the bigInteger.js code... 

function bitOrJS(a, b) {
    var big = new bigInt(a);

    return big.or(b);

}
</script>

输出将如预期的那样
2147483650

JS按位运算符有32位的限制。@最后面的为什么会这样猜测?op-我相信你会得到一个int溢出(或者说我似乎对js中的位操作不太了解),请参阅,以获得一个很好的解释和一个不错的解决方法。如果需要在64位值上执行逐位操作,考虑使用两个32位值。VBScript只对整数进行签名(我们称之为long)。没关系,因为比特是一样的。你只需要知道它会显示为负数。只是不要对它们做基础数学。你错了。对于问题中的值,VBScript会引发溢出错误:Response.Write(2和2147483648)-溢出:“[number:2147483648]”
<script language="javascript" runat="server">

... the bigInteger.js code... 

function bitOrJS(a, b) {
    var big = new bigInt(a);

    return big.or(b);

}
</script>
Dim result

result = bitOrJS(2147483648, 2)

response.write result