3

我一直在处理一些报告,最近为我一直在查询的系统找到了一个小指南。它提供的部分语法如下:

... "WHERE [FIELD] & [VALUE] = [VALUE]"

IE:... "WHERE flags & 16 = 16"

我只是好奇这个语法是什么意思......我得到了类似 WHERE flags = 16 的东西,但不是 '&16 = 16' 部分。任何澄清?

文章参考:http ://rightfaxapi.com/advanced-sql-for-manipulating-faxes/

谢谢你,韦斯

4

2 回答 2

5

&正在做一个位明智的“和” 。因此,只有当两个位都为 1 时,它才为“1”。整体逻辑是检查是否所有位value都设置在field.

例如,考虑一下value

0000 0101

那么如果字段是

1111 1111

&

0000 0101

1s 仅在两者都存在的情况下1。)

这与value. 所以,这通过了条件。

现在如果field是:

0001 1110

然后&是:

0000 0100

这与 不同value,因此它不通过条件。

于 2014-02-03T20:05:12.660 回答
2

&是按位与。在您的示例中,您的掩码是 16(0x0010, binary 0000 0000 0001 0000 )。AND 操作的结果将是 0(未设置掩码中的所有位)或掩码值(设置掩码中的所有位)。因此,您的where A&16 = 16表达式正在测试是否设置了整数值的第 5 位(从右数)。

例子:

  • 48 & 16 = 16是真的:

        48 (binary: 0000 0000 0011 0000)
    AND 16 (binary: 0000 0000 0001 0000)
        -- -----------------------------
        16 (binary: 0000 0000 0001 0000)
    
  • 33 & 16 = 16是假的:

        33 (binary: 0000 0000 0010 0001)
    AND 16 (binary: 0000 0000 0001 0000)
        -- -----------------------------
         0 (binary: 0000 0000 0000 0000)
    

简单的!

于 2014-02-03T20:34:58.833 回答