在代码中常常能看到一个接收整数类型参数的方法或函数被调用时,传入的参数为几个整数用"|"竖线连接;
如log包中设置日志格式的函数
调用者使用竖线连接
查看源码中几个整数对应的值为:
直接在代码中尝试运算log.Ldate | log.Ltime | log.Lshortfile 看看结果
所以实际上"|"表示的是按位或操作。将00000001,00000010,00010000进行位或运算后得到00010011
按位或(bitwise OR)
按位或(bitwise OR)操作是一种针对二进制数进行的逐位操作,它将两个二进制数的对应位进行逻辑或运算。按位或操作符用符号 `|` 表示。
按位或操作的规则如下:
- 对于每一位,如果两个二进制数的对应位至少有一个为1,则结果位为1;如果两个二进制数的对应位都是0,则结果位为0。
- 操作过程中,参与按位或操作的两个二进制数的位数必须相同。
例如,考虑以下两个二进制数进行按位或操作的示例:
在上面的示例中,两个二进制数的对应位逐位进行按位或操作。结果中的每一位根据以下规则计算:
- 第一位:1 OR 1 = 1
- 第二位:0 OR 1 = 1
- 第三位:1 OR 0 = 1
- 第四位:0 OR 0 = 0
- 第五位:1 OR 1 = 1
- 第六位:0 OR 1 = 1
- 第七位:1 OR 0 = 1
- 第八位:0 OR 0 = 0
按位或操作常用于将多个标志(flags)进行组合,以便表示多个选项或状态。每个标志可以用一个二进制位来表示,将这些标志进行按位或操作后,可以得到一个组合的标志值,用于表示多个选项的状态。
回归到log包中的格式设置,就可知。log.Ldate | log.Ltime | log.Lshortfile,是将第0位,第1位和第4位置位1,
这几位对应的标志生效;
既然是组合标志位,那是不是也可以用数组呢?
答案是肯定的,数组当然也可以做到 只是使用使用数组来代替二进制位存在一些劣势:
1. 空间占用:使用数组来表示二进制位需要更多的内存空间。对于大量的二进制位操作,数组的空间占用会显著增加,尤其当需要处理大规模的数据时,数组可能会占用过多的内存资源。
2. 访问复杂性:数组中的每个元素都需要单独访问和操作,而且需要进行索引计算。相比之下,按位操作更加简洁和高效,直接在二进制位级别上进行操作,不需要进行额外的索引计算和访问操作。
3. 代码可读性:使用数组来表示二进制位的代码可能会更加冗长和难以理解。相比之下,按位操作通常可以使用更简洁和直观的代码来表达意图,提高代码的可读性和可维护性。
综上所述,尽管使用数组来表示二进制位在某些情况下是可行的,但相较于按位操作,它存在着更高的空间占用、访问复杂性和代码可读性等劣势。因此,在处理二进制位操作时,按位操作通常是更常用和更有效的选择。
位掩码
在代码中常常使用位掩码来获取二进制位的值
位掩码(Bitmask)是一种用于操作二进制位的技术,通过设置特定的位模式来表示某些信息或进行特定操作。
位掩码通常是一个二进制数,其中每个位都对应一个特定的含义或标志。每个位的值为 1 表示对应的标志位被激活或启用,值为 0 表示对应的标志位未被激活或禁用。
通过使用位掩码,可以对二进制数的特定位进行读取、设置或清除操作。常见的操作包括按位与(Bitwise AND)、按位或(Bitwise OR)、按位异或(Bitwise XOR)等。
位掩码在计算机领域中广泛应用,例如用于表示权限、状态标志、选项设置等。它提供了一种灵活且高效的方式来管理和操作二进制数据。
只要结果大于0,则表示二进制位为1