我在网上找到了这段我想理解的代码。然而,谷歌搜索并没有找到任何关于以下代码中"与"的含义的结果
return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);
我是从下一页得到的:http://freespace.virgin.net/hugo.elias/models/m_perlin.htm
是的,有人指出这不是真正的佩林,但我不在乎,我现在想知道基本情况。
问候
与号是按位AND。这意味着你在比特级别上进行比较。对于每个比特,当且仅当2个输入比特为1时,得到的比特为1。
1 & 2 = 0
因为:
1=0000000 1
2=00000010
但是
2 & 3 = 2
因为我们有:
2=00000010
3=00000011
结果=00000010
在您的情况下,逐位AND用于强制结果的第一位为0(如果结果为32位,在您的示例中就是这样),因为:
7fffffff = (0111) (1111) (1111) etc...
因此,无论你用什么"与"它,结果都将以0开头,然后保持不变。
假设结果是一个有符号整数,将第一位置为0的效果是确保结果始终为正。
这是因为在cpp中,有符号整数的第一位用于设置符号。1表示数字为负数,0表示数字为正数。
&
是按位的and
运算符。
0 & 0 == 0
1 & 0 == 0
0 & 1 == 0
1 & 1 == 1