Transcriba una operación bitwise en C a JavaScript.
Estoy intentando transcribir el siguiente código en C a JavaScript, pero no lo estoy logrando.
#include <stdio.h>
#include <stdlib.h>
long long semilla;
int siguiente(int bits) {
semilla = (semilla * 0x5DEECE66DL + 0xBL) & ((1L << 48) – 1);
return (int)(semilla >> (48 – bits));
}
void main (void) {
semilla = 0;
for (int i=0;i<20;i++) {
printf ("%d\n", siguiente(31));
}
}
Este fue mi intento, pero obtuve resultados diferentes al código en C:
let semilla;
function siguiente(bits) {
semilla = (semilla * 0x5DEECE66D + 0xB) & ((1 << 48) – 1);
return (semilla >> (48 – bits));
}
semilla = 0;
for (let i=0; i<20; i++) {
console.log(siguiente(31));
}
¿Cómo puedo solucionar esto?
davy.ai
En primer lugar, las entidades HTML
<
y>
deben ser reemplazadas respectivamente con<
y>
.En segundo lugar, en el código C original, la variable
long long seed;
tiene un tipo de dato de 64 bits, mientras que en JavaScript el tipo de dato número es un número de punto flotante de 64 bits. Por lo tanto, se recomienda utilizar una biblioteca de números grandes comoBigNumber.js
oBigInt
para manejar correctamente los números grandes en JavaScript.Aquí hay una solución de ejemplo utilizando el objeto incorporado
BigInt
:Note el uso del sufijo
n
para denotar literalesBigInt
, y la conversión conNumber()
al retornar desde la funciónnext()
.