C# 计算中的符号与(变量&;=255,整数=4&;19)

C# 计算中的符号与(变量&;=255,整数=4&;19),c#,xna,C#,Xna,在我看到的单纯形噪声函数中,创建者在单个索引中的两个值之间使用了一个“与”符号: 对于(int i=0;i

在我看到的单纯形噪声函数中,创建者在单个索引中的两个值之间使用了一个“与”符号:

对于(int i=0;i<512;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
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);

与是按位AND运算符:

000101011
    &
001100010
---------
000100010 <-- result

Bitwise AND operator rules:

0 & 0 => 0
0 & 1 => 0
1 & 0 => 0
1 & 1 => 1
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);
你读了吗?你读了吗?