Por ejemplo, ¿cómo obtener la respuesta correcta al 137438953472 & 137438953472
?¿Cómo hago un bitwise y en números mayores a 2^32 en Javascript?
Javascript devuelve 0 si los operandos están entre 2^32 y 2^53 (max int).
Por ejemplo, ¿cómo obtener la respuesta correcta al 137438953472 & 137438953472
?¿Cómo hago un bitwise y en números mayores a 2^32 en Javascript?
Javascript devuelve 0 si los operandos están entre 2^32 y 2^53 (max int).
autorización aquí es lo que me ocurrió con sólo probado con enteros sin signo < 2^53:
edición: clavado un error cuando los resultados parciales se interpretan como firmados
function and(op1, op2) {
var mod = Math.pow(2, 32),
op1mod = op1 % mod,
op2mod = op2 % mod,
op164to32,
op264to32,
res32, res64, res;
op1 -= op1mod;
op2 -= op2mod;
res32 = (op1mod & op2mod) >>> 0;
op164to32 = op1/mod;
op264to32 = op2/mod;
res64 = (op164to32 & op264to32) >>> 0;
res = res64 * mod + res32;
return res;
}
and(137438953473, 137438953473)
//137438953473
and(137439087606, 137438953473)
//137438953472
and(0xCAFECAFECAFE, 0xBABEBABEBABE)
//152550976162494
resultados confirmados a ser correcta con la calculadora de Windows de 64 bits: P
Sí, me preguntaba acerca de su respuesta original (eliminada). Lo voté por encima, aunque parecía que produciría un resultado incorrecto. –
Podría necesitar más pruebas, por favor coméntelo aquí si lo encuentra dando un resultado incorrecto con unsigned <2^53 – Esailija
podría escribirse un poco más fácil (al menos para mí): '((Math.floor (operand1/i32) & Math.floor (operando2/i32)) * i32 + ((operando1% i32) & (operando2% i32)) 'donde i32 = 4294967296; (2^32). – Alena
Solo para aclarar, usted está buscando _realmente_ hacer una operación de bit "y", como lo indica el 'y', ¿correcto? – cdeszaq
[Esta respuesta] (http://stackoverflow.com/questions/307179/what-is-javascripts-max-int-whats-the-highest-integer-value-a-number-can-go-t) puede ser de interés para usted. > los operadores bit a bit y los operadores de turno operan en entradas de 32 bits. Y 2^53 parece ser un valor de 64 bits. –