0

나는 a tutorial on Perlin Noise을 읽고 있어요, 나는이 기능을 통해 온 : 나는 그것의 일부를 이해 할 수 있지만누군가이 간단한 함수를 Javascript로 변환 할 수 있습니까?

function IntNoise(32-bit integer: x)    

    x = (x<<13)^x; 
    return (1.0 - ((x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff)/1073741824.0);  

end IntNoise function 

, 내가 정말 (내가 것을 (x<<13)과 뜻 & 7fffffff를 볼 수 있습니다 것을 얻을하지 않습니다 16 진수입니다.하지만 어떻게됩니까?). 누군가 JS로 번역 할 수 있습니까? 또한 정상적인 정수는 32 비트 컴퓨터에서 JS의 32 비트입니다. 맞습니까?

답변

3

그것은 최소한의 변형으로 JavaScript로 작동해야

function IntNoise(x) { 
    x = (x << 13)^x; 
    return (1 - ((x * (x * x * 15731 + 789221) + 1376312589) & 0x7fffffff)/1073741824); 
} 

<< 연산자는 비트가 시프트 좌측 그래서 << 13 수단은, 좌측 숫자 13 비트 시프트.

& 연산자는 비트 AND입니다. 부호있는 32 비트 정수에 & 0x7fffffff을 지정하면 부호 비트가 마스크되어 결과가 항상 양수 (또는 0)가됩니다.

자바 스크립트가 숫자를 처리하는 방식은 다소 기발합니다. 모든 숫자는 일반적으로 IEEE-754 doubles으로 표시되지만 숫자에 비트 연산자를 사용하기 시작하면 JavaScript는 해당 계산 기간 동안 피연산자를 부호있는 32 비트 정수로 처리합니다.

+0

굉장합니다 , 고맙습니다! – corazza

3

x<<13 수단이 왼쪽 (비트)에 X 13 개 단계를 이동 :

여기에 어떻게 자바 스크립트 상품의 비트 연산과의 좋은 설명입니다. a<<ba*2^b과 같습니다.

& 7ffffff은 왼쪽과 7FFFFFFF의 비트 단위 AND를 의미합니다. 7FFFFFFF의 비트 패턴을 살펴보면 비트 32가 0이고 나머지 비트가 1이라는 것을 알 수 있습니다. 이는 비트 0-30을 마스크하고 비트 31을 마스킹한다는 것을 의미합니다.