我一直在处理一些报告,最近发现了一个我一直在查询的系统的小指南。它提供的部分语法如下:
... "WHERE [FIELD] & [VALUE] = [VALUE]"
即:... "WHERE flags & 16 = 16"
我只是好奇这个语法是什么意思...我得到的东西像WHERE flags = 16,但不是'& 16 = 16'部分。有任何澄清吗?
引用文章:http://rightfaxapi.com/advanced-sql-for-manipulating-faxes/
谢谢你, 韦斯
答案 0 :(得分:5)
&
正在做一点“和”。因此,只有当两个位都为1时才为“1”。整体逻辑检查value
中的所有位是否都在field
中设置。
例如,请考虑value
是:
0000 0101
然后,如果字段是
1111 1111
&
是:
0000 0101
(1
只是两者都是1
。)
这与value
相同。所以,这传递了条件。
如果field
是:
0001 1110
然后&
是:
0000 0100
这与value
不同,因此它不会通过条件。
答案 1 :(得分:2)
&
是按位AND。在您的示例中,掩码为16(0x0010,二进制0000 0000 0001 0000)。 AND操作的结果将为0(掩码中的所有位未设置)或掩码值(掩码ARE中的所有位都设置)。所以你的where A&16 = 16
表达式正在测试是否设置了从右边算起的整数值的第5位。
示例:
48 & 16 = 16
为TRUE:
48 (binary: 0000 0000 0011 0000)
AND 16 (binary: 0000 0000 0001 0000)
-- -----------------------------
16 (binary: 0000 0000 0001 0000)
33 & 16 = 16
为FALSE:
33 (binary: 0000 0000 0010 0001)
AND 16 (binary: 0000 0000 0001 0000)
-- -----------------------------
0 (binary: 0000 0000 0000 0000)
容易!