Dav*_*vid 4 c# filtering bit-shift
我的一位同事写了一篇声明,我并不完全理解.不幸的是他现在还没有,所以在这里(修改后的名字,我们正在Unity中开展游戏).
private readonly int FRUIT_LAYERS =
(1 << LayerMask.NameToLayer("Apple"))
| (1 << LayerMask.NameToLayer("Banana"));
Run Code Online (Sandbox Code Playgroud)
NameToLayer接受一个字符串并返回一个整数.我一直看到左移位运算符在右侧而不是左侧使用常数整数,我通过Google找到的所有示例都遵循这种方法.在这种情况下,我认为他正在将Apple和Banana推到同一个相对层(我稍后将用于过滤).在未来会有更多的"成果"来过滤.任何精彩的stackoverflowers谁可以给我解释这些线上发生的事情?
1 << x 本质上是说"给我一个数字,其中第(x + 1)位为1,其余数字都为零.
x | y是一个按位OR,所以它将遍历从1到n的每个位,如果该位是1中的一个x,y那么该位将是结果中的一个,否则它将为零.
因此,如果LayerMask.NameToLayer("Apple")返回2和LayerMask.NameToLayer("Banana")返回3则FRUIT_LAYERS是一个设置了第3和第4位的数字,它是1100二进制的,或者是基数10的12.