大きな数値に対してビット単位の演算を行う必要があります。例えば大きな値のビット単位のOR
:
2 | 2147483648
私は2147483650
期待するが、その代わりに、なぜこれは、と私はそれについて何ができる-2147483646
になるだろうか?
注意、私が働いているコードは、私が回避策を見つけたjsの
大きな数値に対してビット単位の演算を行う必要があります。例えば大きな値のビット単位のOR
:
2 | 2147483648
私は2147483650
期待するが、その代わりに、なぜこれは、と私はそれについて何ができる-2147483646
になるだろうか?
注意、私が働いているコードは、私が回避策を見つけたjsの
の古いバージョンであると信じて、従来のASPにサーバー側を実行されるいくつかの古いJavaScriptコード、です。
ライブラリを少し変更して、Classic ASPのサーバー側JSで使用すると、BigInteger.js
ライブラリを使用できます。
https://raw.githubusercontent.com/peterolson/BigInteger.js/master/BigInteger.js
は、従来のASPで使用するためには、次の操作を行います。
修正ライン21と、それは古典的なASPでサーバー側に動作しますので、BigInteger.js
ライブラリーの28:
変更21行目:
BigInteger.prototype = Object.create(Integer.prototype);
へ:
BigInteger.prototype = new Object(Integer.prototype);
また、28行目と同じ変更を加えます。
次に、最後の4行を削除します。彼らは必要ありません:あなたは今、従来のASPのVBScriptコード内の関数を使用することができます
<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
出力は以下となります
// Node.js check
if (typeof module !== "undefined" && module.hasOwnProperty("exports")) {
module.exports = bigInt;
}
を次に、あなたのスクリプトの中でこのようにそれを含めます期待どおり2147483650
になります。
[MDNビット演算子](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators)JSビット演算子には32ビットの制限があります。 –
@ hindmostなぜあなたはそれを推測しますか? op - int overflowが発生していると思います(または、jsのビット操作についてよく分かりません) – user2717954
[this so article](http://stackoverflow.com/questions/2983206/bitwise) -and-in-a-64-bit-integer#2983294)、良い説明とまともな回避策があります。 64ビット値に対してビット単位の操作を実行する必要がある場合は、2つの32ビット値を使用することを検討してください。 – RamblinRose