Golang中的管道角色

时间:2016-03-14 12:39:11

标签: go bit-manipulation

在包golang.org/x/sys/windows/svc中有一个包含此代码的示例:

const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown | svc.AcceptPauseAndContinue

|字符是什么意思?

3 个答案:

答案 0 :(得分:23)

正如其他人所说,它是按位[包含] OR运算符。更具体地说,运算符被用于创建位掩码标志,这是一种基于逐位算术组合选项常量的方法。例如,如果你有两个幂的选项常量,就像这样:

const (
    red = 1 << iota    // 1 (binary: 001) (2 to the power of 0)
    green              // 2 (binary: 010) (2 to the power of 1)
    blue               // 4 (binary: 100) (2 to the power of 2)
)

然后你可以将它们与按位OR运算符组合起来,如下所示:

const (
    yellow = red | green          // 3 (binary: 011) (1 + 2)
    purple = red | blue           // 5 (binary: 101) (1 + 4)
    white = red | green | blue    // 7 (binary: 111) (1 + 2 + 4)
)

因此,它简单地为您提供了一种基于按位算法组合选项常量的方法,依赖于在二进制数系统中表示2的幂的方式;注意使用OR运算符时如何组合二进制位。 (有关更多信息,请参阅C编程语言中的this example。)因此,通过组合示例中的选项,您只需允许服务接受停止,关闭暂停并继续执行命令

答案 1 :(得分:4)

  

The Go Programming Language Specification

     

Arithmetic operators

|    bitwise OR             integers

Go编程语言在The Go Programming Language Specification中定义。

答案 2 :(得分:1)

此处|不是竖线字符,而是字符,是位操作之一。

例如,1 | 1 = 11 | 2 = 30 | 0 = 0