2016-12-27 12 views
-1

Мне нужно выполнить побитовые операции на больших количествах.Побитовое ИЛИ на больших значениях

Например:

2 | 2147483648

я ожидал бы 2147483650, но вместо этого, получить -2147483646

Почему это, и что я могу поделать?

Обратите внимание, код, я работаю на некоторый старый Javascript код, который выполняется на стороне сервера в классическом аспида, который я считаю, это старая версия JS

+4

[Побитовые операторы MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) У вас есть 32-битное ограничение с побитовыми операторами JS. –

+1

@hindmost почему ты догадался? op - вы получаете переполнение int Я верю (или, кажется, я мало знаю о манипуляциях с битами в js) – user2717954

+0

См. [Эту статью SO] (http://stackoverflow.com/questions/2983206/bitwise -and-in-javascript-with-a-64-bit-integer # 2983294) для хорошего объяснения и достойной работы. Если вам необходимо выполнить побитовые операции с 64-битными значениями, рассмотрите возможность использования двух 32-битных значений. – RamblinRose

ответ

0

Я нашел обходной путь.

Вы можете использовать библиотеку BigInteger.js с небольшими изменениями для использования на серверной JS с классическим ASP.

https://raw.githubusercontent.com/peterolson/BigInteger.js/master/BigInteger.js

Для использования в классических осины, выполните следующие действия:

Изменение линии 21 и 28 BigInteger.js библиотеки, поэтому он будет работать на стороне сервера с классическим ASP:

Change Line 21:

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

To:

BigInteger.prototype = new Object(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> 

Теперь вы можете использовать эту функцию в классическом ASP VBScript код:

Dim result 

result = bitOrJS(2147483648, 2) 

response.write result 

выход будет be 2147483650 как и ожидалось.