代码中的符号,它做什么

ampersand in code, what does it do

本文关键字:什么 符号 代码      更新时间:2023-10-16

我在网上找到了这段我想理解的代码。然而,谷歌搜索并没有找到任何关于以下代码中"与"的含义的结果

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