将C位操作转换为JS



我正试图将以下C代码转录到JavaScript中,但我没有得到。

#include <stdio.h>
#include <stdlib.h>
long long seed;
int next(int bits) {
seed=(seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
return (int)(seed >> (48 - bits));
}
void main (void) {
seed = 0;
for (int i=0;i<20;i++) {
printf ("%dn", next(31));
}
}

这是我的尝试,但我从C代码得到了不同的结果:

let seed;
function next(bits) {
seed = (seed * 0x5DEECE66D + 0xB) & ((1 << 48) - 1);
return (seed >> (48 - bits));
}
seed = 0;
for ( let i=0; i<20; i++ ) {
console.log( next(31) );
}

我该怎么做?

您可以在javascript中使用BigInt,并将BigInt((和n附加到数字文字后:

let seed = 0n;
function next(bits) {
seed = (seed * BigInt(0x5deece66d) + BigInt(0xb)) & ((1n << 48n) - 1n);
return seed >> (48n - bits);
}
for (let i = 0; i < 20; i++) {
console.log(next(31n));
}

输出:

0n
2116118n
89401895n
379337186n
782977366n
196130996n
198207689n
1046291021n
1131187612n
975888346n
500746873n
1785185521n
2000878121n
1219898729n
1194203485n
109160704n
1647229822n
40619231n
541938462n
640373553n

最新更新