2012-02-02 68 views
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應該意味着(我看到它是一個十六進制數字,但它有什麼作用?)。有人可以幫我把這個翻譯成JS嗎?另外,正常的整數在JS中是32位,在32位計算機上,對吧?

回答

3

應該在JavaScript中工作以最小的修改:

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

<<操作是按位左移,因此<< 13裝置的數目13位左移。

&運算符是一個按位與。在帶符號的32位整數上執行& 0x7fffffff可屏蔽符號位,確保結果始終爲正數(或零)。

JavaScript處理數字的方式有點古怪,至少可以說。所有數字通常表示爲IEEE-754 doubles,但是......一旦您開始在數字上使用按位運算符,則JavaScript將在該計算期間將操作數視爲帶符號的32位整數。

這裏有一個如何的JavaScript涉及位操作一個很好的解釋:

+0

太棒了, 謝謝! – corazza 2012-02-02 18:53:52

3

x<<13方式轉變×13步至左(位)。 此外a<<b相當於a*2^b

& 7ffffff表示左邊與7FFFFFFF的按位與。 如果你看一下7FFFFFFF的位模式,你會注意到位32是0,其餘的位是1.這意味着你將屏蔽掉位0-30並丟棄位31.

相關問題