MySQL WHERE子句中&(Ampersand)运算符:xyz & 192 > 0作用解析
MySQL WHERE 条件
(xyz & 192 > 0) 解析 核心逻辑说明
这里的&是MySQL的按位与运算符,运算规则为:两个数值的二进制对应位同时为1时,结果的对应位才为1,否则为0。
我们先把涉及的数值转成二进制方便理解:
- 192 = 128 + 64,对应的二进制为
11000000,只有从右数第7位(对应128)、第6位(对应64)为1,其余位全为0 - xyz的取值是2的幂次或多个幂次的和,本质上每个二进制位对应一个枚举状态,不同位之间互不干扰
条件作用
当xyz和192做按位与运算时,结果只会保留xyz二进制中第6、7位的取值,其余位都会被清零。判断运算结果大于0,等价于:
xyz的取值中至少包含64、128两个值中的任意一个(也可以同时包含两个)
示例验证
我们可以用几个实际值验证判断逻辑:
- xyz = 64:
64 & 192 = 64 > 0,满足条件 - xyz = 128:
128 & 192 = 128 > 0,满足条件 - xyz = 64 + 32 = 96:
96 & 192 = 64 > 0,满足条件 - xyz = 64 + 128 = 192:
192 & 192 = 192 > 0,满足条件 - xyz = 32 + 16 = 48:
48 & 192 = 0,不满足条件 - xyz = 1:
1 & 192 = 0,不满足条件
最终结论
这条WHERE条件的作用就是筛选出表中xyz字段包含64或者128枚举值的所有行记录。
内容的提问来源于stack exchange,提问作者G-Z
相关产品推荐
相关产品推荐

