gpt4 book ai didi

c# - 这条语句中按位 & 的作用是什么?

转载 作者:太空狗 更新时间:2023-10-29 22:35:50 24 4
gpt4 key购买 nike

我一直在阅读关于 implementation 的文章C# 中的菱形方形算法,环绕以创建无缝纹理。为了计算下一个点,对排列成正方形或菱形的四个样本点取平均值。如果样本点位于纹理的边缘,则它会环绕到另一侧。这种包装似乎是使用以下方法完成的:

public double sample(int x, int y)
{
return values[(x & (width - 1)) + (y & (height - 1)) * width];
}

一些研究告诉我这是一个按位运算符。我以前没用过,wikipedia article没有启发。有人可以解释一下 & 运算符在此方法中的作用吗?

编辑:纹理尺寸总是2的幂

最佳答案

这是为了“包装”。假设 widthheight 是 2 的幂(否则它不起作用,所以最好是 true),x & (width - 1) 主要等同于 x % width,除了它也适用于负 x(而 x % width 为负 x 会产生负面结果)并且几乎肯定会更快。

或者用一个例子直观地表达,比如width = 64x = 64+12 = 76,然后

x       = 00000000 00000000 00000000 01001100
w = 00000000 00000000 00000000 01000000
w-1 = 00000000 00000000 00000000 00111111
x & w-1 = 00000000 00000000 00000000 00001100 = 12

w-1的形式可以看出,操作x & w-1就像只取x的低位code>,当然假设 w 仍然是 2 的幂。因此,权重为 64 和 64 的倍数的位被删除,就像真正的“模 64”操作一样(如果您使用的是带符号的整数,则在 C# 中不是 %,这是余数)。

关于c# - 这条语句中按位 & 的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46725865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com