How to do bitwise AND in javascript on variables that are longer than 32 bit? How to do bitwise AND in javascript on variables that are longer than 32 bit? javascript javascript

How to do bitwise AND in javascript on variables that are longer than 32 bit?


Here's a fun function for arbitrarily large integers:

function BitwiseAndLarge(val1, val2) {    var shift = 0, result = 0;    var mask = ~((~0) << 30); // Gives us a bit mask like 01111..1 (30 ones)    var divisor = 1 << 30; // To work with the bit mask, we need to clear bits at a time    while( (val1 != 0) && (val2 != 0) ) {        var rs = (mask & val1) & (mask & val2);        val1 = Math.floor(val1 / divisor); // val1 >>> 30        val2 = Math.floor(val2 / divisor); // val2 >>> 30        for(var i = shift++; i--;) {            rs *= divisor; // rs << 30        }        result += rs;    }    return result;}

Assuming that the system handles at least 30-bit bitwise operations properly.


You could split each of the vars into 2 32-bit values (like a high word and low word), then do a bitwise operation on both pairs.

The script below runs as a Windows .js script. You can replace WScript.Echo() with alert() for Web.

var a = 4294967296;var b = 4294967296;var w = 4294967296; // 2^32var aHI = a / w;var aLO = a % w;var bHI = b / w;var bLO = b % w;WScript.Echo((aHI & bHI) * w + (aLO & bLO));


There are several BigInteger librairy in Javascript, but none of them offer bitwise operation you need at the moment. If you are motivated and really need that functionality you can modify one of those librairy and add a method to do so. They already offer a good code base to work with huge number.

You can find a list of the BigInteger librairy in Javascript in this question :

Huge Integer JavaScript Library