C#左移运算符

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谁可以给我解释这些线上发生的事情?

Ser*_*rvy 7

1 << x 本质上是说"给我一个数字,其中第(x + 1)位为1,其余数字都为零.

x | y是一个按位OR,所以它将遍历从1到n的每个位,如果该位是1中的一个x,y那么该位将是结果中的一个,否则它将为零.

因此,如果LayerMask.NameToLayer("Apple")返回2LayerMask.NameToLayer("Banana")返回3FRUIT_LAYERS是一个设置了第3和第4位的数字,它是1100二进制的,或者是基数10的12.