mirror of
https://github.com/CharaChorder/DeviceManager.git
synced 2025-12-11 05:16:16 +00:00
20 lines
616 B
JavaScript
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
|
|
}
|