Files
DeviceManager/src/lib/serial/webserial/util/big-math.js
2023-07-05 15:22:14 +02:00

20 lines
616 B
JavaScript

/**
* JavaScript handles up to 53-bit bs it uses float64 to operate with integers
*/
function bitwiseAndLarge(val1, val2) {
let shift = 0,
result = 0
const mask = ~(~0 << 30) // Gives us a bit mask like 01111..1 (30 ones)
const divisor = 1 << 30 // To work with the bit mask, we need to clear bits at a time
while (val1 !== 0 && val2 !== 0) {
let rs = mask & val1 & (mask & val2)
val1 = Math.floor(val1 / divisor) // val1 >>> 30
val2 = Math.floor(val2 / divisor) // val2 >>> 30
for (let i = shift++; i--; ) {
rs *= divisor // rs << 30
}
result += rs
}
return result
}