什么和& (单&符号)和| (单管)操作员在比较操作中做什么?

时间:2016-01-07 21:22:18

标签: swift

在如下的声明中:

if (valueA & valueB) != 99 {

    print("they don't equal 99")

}

&运营商做了什么?我认为这意味着如果valueA和valueB都不等于99执行该块。

然后|在这句话中做了什么:

if valueA != (99 | 0) {

    print("it doesn't equal 99")

}

我认为这意味着如果valueA不等于99或0执行该块。然而,我的假设似乎都不正确。

编写上述陈述的正确方法是:

if valueA != 99 && valueB != 99 {

    print("it doesn't equal 99")

}

似乎合乎逻辑的是,提出的第一个if语句将是一种非常简洁的编写方式,因为它缩短了编写的代码,并且如果不是更多,仍然是显式的。

2 个答案:

答案 0 :(得分:9)

这些都是Bitwise Operators,可以让你操纵实际的数据位。

以下信息按原样从官方文档中复制:

按位AND运算符

按位 AND 运算符(&)组合了两个数字的位。只有当两个输入数字中的位等于1时,它才会返回一个新的数字,其位设置为1

AND Operator

按位OR运算符

按位 OR 运算符(|)比较两个数字的位。如果两个输入数中的位等于1,则运算符返回一个新的数字,其位设置为1

enter image description here

答案 1 :(得分:1)

这些运营商执行bitwise arithmetic

  

按位AND采用两个相等长度的二进制表示,并通过将它们相乘对每对相应位执行逻辑AND运算。因此,如果比较位置中的两个比特都是1,则得到的二进制表示中的比特是1(1×1 = 1);否则,结果为0(1×0 = 0且0×0 = 0)。

     

按位OR采用相等长度的两个位模式,并对每对相应位执行逻辑包含OR运算。如果两个位都为0,则每个位置的结果为0,否则结果为1。