c ++ math/hex问题

SDu*_*uke 3 c++ math hex

很抱歉,如果这听起来有点'noobish'但我不知道c ++,我正在寻找一些代码来解决perlin噪音问题,当我遇到它时试图找出它

& 0x7fffffff

(n << 13) ^ n;

而且我不知道那些意思是什么.我知道这0x7fffffff是十六进制,但我不知道这&意味着什么帮助?

Mik*_*ola 7

第一个表达式是位掩码.它基本上清除了数字的高位,或者相当于计算超过2 ^ 31的数字的mod.

第二个表达式是移位,后跟xor.在算术中,将n乘以2 ^ 13,然后翻转移位版本与其自身之间共同的所有位将是相同的.它在perlin噪声代码中的用途是计算x,y坐标的程序空间散列,以便它们可用于为噪声发生器提供种子.

在许多程序内容中使用相同类型的技术来创建动态变化的伪随机数生成器,其在空间中确定性地变化.这些哈希基本上是复杂的,难以预测的,几乎是随机的功能,通常是在理论,猜测工作和实验的混合中发现的.因此,我不建议过分思考为什么在这种情况下使用该特定公式.