有人能把这个简单的函数翻译成Javascript吗
Can someone translate this simple function into Javascript?
我正在阅读一篇关于Perlin Noise的教程,我发现了这个函数:
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位的计算机上,对吧?
它应该在JavaScript中工作,只需最少的修改:
function IntNoise(x) {
x = (x << 13) ^ x;
return (1 - ((x * (x * x * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824);
}
<<
运算符是按位左移,因此<< 13
意味着向左移动数字13位。
&
运算符是按位AND。对有符号的32位整数执行& 0x7fffffff
会屏蔽符号位,确保结果始终为正数(或零)。
至少可以说,JavaScript处理数字的方式有点古怪。所有数字通常表示为IEEE-754双,但是。。。一旦开始对数字使用逐位运算符,JavaScript就会在计算期间将操作数视为有符号的32位整数。
以下是JavaScript如何处理位操作的一个很好的解释:
- 逐位运算符
x<<13
表示向左移动x 13步(按位)。此外,CCD_ 8等价于CCD_ 9。
& 7ffffff
表示左侧与7FFFFFFF的位"与"。如果你看一下7FFFFFFF的比特模式,你会注意到比特32是0,其余的比特是1。这意味着您将屏蔽位0-30并丢弃位31。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 如何在JavaScript中将字符串转换为函数引用
- 用嵌套函数和默认函数定义函数
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 需要翻译代码行以适应 replaceWith() 函数
- 如何翻译函数
- CSS 翻译不适用于数学函数
- 如何使用angular translate从HTML中的函数获取翻译ID
- 翻译php中的javascript函数
- 有人能把这个简单的函数翻译成Javascript吗
- 使用JS和HTML中的函数逐个拆分输入并逐个翻译输入
- JQuery翻译函数在firefox/chrome中不起作用
- 这个JavaScript时区函数最好翻译成Java双基元吗
- 将javascript函数翻译成coffee-script
- 翻译Jquery函数到纯Javascript
- 谷歌翻译:TranslateElement不是一个函数
- 如何将JavaScript构造函数翻译为Amber Smalltalk