将伪代码转换为Python

时间:2011-09-29 04:00:39

标签: python

为了完全预先,这是关于作业,但这本身不是作业。该任务使用噪声来创建酷炫的图形。我在Python方面有一些经验,但还不足以解决这个问题。

我在生成种子随机[-1,1]时遇到了麻烦。我老师给我的伪代码来自Hugo Elias.

伪代码:

function Noise1(integer x, integer y)
    n = x + y * 57
    n = (n<<13) ^ n;
    return ( 1.0 - ( (n * (n * n * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);    
  end function

我在Python中的尝试:

def noise(x, y):
    n = x + y * 57
    n = (n<<5) ^ n;
    return ( 1.0 - ( (n * (n * n * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0)

问题是return语句中的& 7fffffff位。首先,我不确定那是什么操作。也许有点转变?其次,我不确定如何在Python中执行该操作。我刚刚删除了那部分,但是我得到了巨大的负数,远不及[-1,1]

3 个答案:

答案 0 :(得分:3)

&符号代表按位AND
^符号代表按位XOR

并且7FFFFFFFHEX个号码 在编程中,您可以使用0x 7FFFFFFF 0x7FFFFFFF来表示十六进制数字 Some further reading on hex numbers

要在python中执行二进制AND,只需使用& 0x7FFFFFFF
在此处查看有关bitwise operations in python

的更多信息

答案 1 :(得分:1)

我在现有代码中将7FFFFFFF替换为0x7FFFFFFF,并尝试插入一些随机值,我得到的所有答案都在[-1,1]中。

答案 2 :(得分:1)

  

问题在于&amp; 7fffffff位在return语句中。首先,我不确定那是什么操作。也许有点转变?

位掩码。 <<用于转移。 &是按位AND。 7fffffff,解释为十六进制数,是一个数量,如果以二进制重写,有31位,所有这些都是1.效果是选择值的低位31位。 / p>

要告诉Python 7fffffff应该被解释为十六进制数字,您必须在其前面添加0x,因此0x7fffffff

  

其次,我不确定如何在Python中执行该操作。

与伪代码相同(即使用&)。