我在网上找到了我想了解的这段代码。但是,谷歌搜索没有发现以下代码中&符号的含义的任何结果
return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);
Run Code Online (Sandbox Code Playgroud)
我从以下页面得到它:http : //freespace.virgin.net/hugo.elias/models/m_perlin.htm
是的,有人指出它不是真正的柏林,但我不在乎,我现在想知道基础知识。
你好
&符号是按位与。这意味着您是在位级别进行比较。对于每个位,结果位为 1 当且仅当 2 个传入位为 1。
1 & 2 = 0
Run Code Online (Sandbox Code Playgroud)
因为 :
1 = 00000001
2 = 00000010
但
2 & 3 = 2
Run Code Online (Sandbox Code Playgroud)
因为我们有:
2 = 000000 1 0
3 = 000000 1 1
结果 = 000000 1 0
在您的情况下,按位 AND 用于在结果的第一位强制为 0(如果结果为 32 位,则在您的示例中就是这种情况),因为:
7fffffff = (0111) (1111) (1111) etc...
Run Code Online (Sandbox Code Playgroud)
因此,无论您用什么“AND”它,结果都将以 0 开头,然后保持不变。
鉴于结果是一个有符号整数,将第一位设置为 0 的效果是确保结果始终为正。
这是因为在 cpp 中,有符号整数的第一位用于设置符号。1 表示数字是负数,0 表示它是正数。