2 回答
TA贡献1878条经验 获得超4个赞
它是按位而不是逻辑或。
如果你写出来的二进制数字,并指定每个真值0/1,并应用逻辑或到每个位到位i的论据之间,然后将结果重新组合成二进制展开整数-这是该|运营商.
它通常以通常被描述为“位掩码”的方式使用 - 当您希望单个 int 值表示一组(小)可以打开或关闭的开关时,您可以使用位掩码。每个开关一位。
您应该在此上下文中看到,A | B意思是“A 中所有打开的开关,以及 B 中所有打开的开关”。在您的情况下,开关定义文件打开/创建功能的确切行为,如Go 手册所述。(我上面链接的 Unix 手册页可能更详细)。
在位掩码中,通常定义表示每个开关的常量 - 这就是确定那些 O_* 常量的方式。每个都是一个只有一个位集的 int,代表一个特定的开关。(不过,要小心,因为有时它们代表开关的组合!)。
还:
^A // All of the "switches" not currently on in A
A&^B // All of the "switches" on in A but not on in B
A^B // All of the "switches" on in exactly one of A or B
, 等等。
运营商|
本身在围棋手册中描述这里。
TA贡献2016条经验 获得超9个赞
它是按位或运算符。此处使用它的目的是允许将多个值作为位掩码传递。因此,您可以组合标志来创建所需的结果,例如,OpenFile()
如果文件不存在,则使用该函数创建文件,如果文件存在,则附加到该文件。
os.Openfile("foo.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0660
从 os 包作为参数传递的常量是从 syscall 包中赋值的。这个包包含低级操作系统独立值。
包 syscall 包含一个到低级操作系统原语的接口。详细信息因底层系统而异,默认情况下,godoc 将显示当前系统的系统调用文档。如果您希望 godoc 显示另一个系统的系统调用文档,请将 $GOOS 和 $GOARCH 设置为所需的系统。例如,如果您想在 linux/amd64 上查看 freebsd/arm 的文档,请将 $GOOS 设置为 freebsd 并将 $GOARCH 设置为 arm。syscall 的主要用途是在为系统提供更便携接口的其他包中,例如“os”、“time”和“net”。
https://golang.org/pkg/syscall/
正如@BadZen 所指出的,按位或运算符,在这种情况下是“|” 字符,作用于二进制级别,将任何 0 值更改为尚未为 1 的 1。
您应该在这种情况下看到,A | B 的意思是“A 中所有打开的开关,以及 B 中所有打开的开关”。
通过像上面显示的那样执行此操作,您正在操纵函数的行为以创建os.O_CREATE
具有给定名称的文件 ( )foo.txt
或打开文件以进行读/写 ( os.O_RDWR
),并且写入其中的任何值都将被附加 ( os.O_APPEND
)。或者,您可以传递os.O_TRUNC
以在写入之前截断文件。
按位 OR 运算符为您提供了一个强大的解决方案来组合不同的行为,以便从您想要的函数中获得结果。
- 2 回答
- 0 关注
- 210 浏览
添加回答
举报