Должно работать в JavaScript с минимальными изменениями:
function IntNoise(x) {
x = (x << 13) ^ x;
return (1 - ((x * (x * x * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824);
}
Оператор <<
является битовым сдвигом влево, поэтому << 13
означает смещение числа 13 битов влево.
Оператор &
является побитовым AND. Выполнение & 0x7fffffff
для 32-разрядного целого числа со знаком маскирует бит знака, гарантируя, что результатом всегда будет положительное число (или ноль).
То, как JavaScript работает с числами, по меньшей мере, немного странно. Все числа обычно представлены как IEEE-754 удваивается , но ... как только вы начнете использовать побитовые операторы для числа, JavaScript будет обрабатывать операнды как 32-битные целые числа со знаком в течение всего времени вычисления.
Вот хорошее объяснение того, как JavaScript работает с побитовыми операциями: