0

パーリンノイズに関するチュートリアルを読んでいて、この関数に出くわしました。

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に翻訳するのを手伝ってもらえますか?また、通常の整数は、JSでは32ビットですが、32ビットコンピューターではそうですか?

4

2 に答える 2

3

最小限の変更で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 doubleとして表されますが、数値に対してビット単位の演算子を使用し始めると、JavaScriptは、その計算の間、オペランドを符号付き32ビット整数として扱います。

JavaScriptがビット演算をどのように処理するかについての良い説明は次のとおりです。

于 2012-02-02T10:54:36.903 に答える
3

x<<13x 13ステップ左(ビット単位)にシフトすることを意味します。さらにa<<b、と同等a*2^bです。

& 7ffffff7FFFFFFFの左側のビットごとのANDを意味します。7FFFFFFFのビットパターンを見ると、ビット32が0で、残りのビットが1であることがわかります。これは、ビット0〜30をマスクして、ビット31をドロップすることを意味します。

于 2012-02-02T10:54:39.620 に答える