在我见过的单纯噪声函数中,创建者在单个索引的两个值之间使用了&符:
对于(int i = 0; i
{
perm [i] = p [i&255];
}
perm是一维512索引长的整数数组(空),而p是256索引长的看似随机数的列表,范围从0到255,其中每个数字恰好出现一次。那“&”号在索引中做什么?通常,当放在两个值之间时,它会做什么?我注意到,如果其中一个数字是奇数,例如
i = j&k;与i = j%(k + 1)相同;或i = k%(j +1);
只要j或k是奇数。有人可以向我解释在这种情况下&的作用吗?
最佳答案
&
和号是按位AND运算符:
000101011
&
001100010
---------
000100010 <-- result
Bitwise AND operator rules:
0 & 0 => 0
0 & 1 => 0
1 & 0 => 0
1 & 1 => 1
因此整数255以位为单位:
00000000000000000000000011111111 (32 bit mask)
并且
i
也是32位整数。当您将这两个整数合并时,将屏蔽掉所有不相关的位(上述掩码中的0)并保留所需的位。
假设
i
是352,那么您将拥有:352 & 255 => 96
101100000 (352)
011111111 (255)
001100000 (96)
^^
these two bits are the only ones not masked out
做作业时,看看是否可以回答自己的问题:
i = j & k; is the same as i = j % (k + 1); or i = k % (j + 1);
关于c# - 计算中的“&”号(变量&= 255,整数= 4和19),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21616590/