2016-12-27 13 views
-1

大きな数値に対してビット単位の演算を行う必要があります。例えば大きな値のビット単位のOR

2 | 2147483648

私は2147483650期待するが、その代わりに、なぜこれは、と私はそれについて何ができる-2147483646

になるだろうか?

注意、私が働いているコードは、私が回避策を見つけたjsの

+4

[MDNビット演算子](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators)JSビット演算子には32ビットの制限があります。 –

+1

@ hindmostなぜあなたはそれを推測しますか? op - int overflowが発生していると思います(または、jsのビット操作についてよく分かりません) – user2717954

+0

[this so article](http://stackoverflow.com/questions/2983206/bitwise) -and-in-a-64-bit-integer#2983294)、良い説明とまともな回避策があります。 64ビット値に対してビット単位の操作を実行する必要がある場合は、2つの32ビット値を使用することを検討してください。 – RamblinRose

答えて

0

の古いバージョンであると信じて、従来の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になります。