在我见过的单纯噪声函数中,创建者在单个索引的两个值之间使用了&符:


  对于(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/

10-17 02:37