Mysql 查找不带标志的所有行*(设置数据类型)

Mysql 查找不带标志的所有行*(设置数据类型),mysql,logic,bit-manipulation,Mysql,Logic,Bit Manipulation,我试图找到所有没有“接口”修饰符的“类”,所以我写道: SELECT * FROM classes WHERE modifiers & ~0x80 其中,0x80显然是接口修饰符。这确实过滤掉了“接口”,但也排除了没有标志的类。因此,我不得不将其修改为: SELECT * FROM classes WHERE modifiers=0 OR modifiers & ~0x80 这是正常的做法吗?看起来很有趣,我必须做两次检查。我的逐位逻辑可能有点生疏。您选择的是除第8位之外的任

我试图找到所有没有“接口”修饰符的“类”,所以我写道:

SELECT * FROM classes WHERE modifiers & ~0x80
其中,
0x80
显然是接口修饰符。这确实过滤掉了“接口”,但也排除了没有标志的类。因此,我不得不将其修改为:

SELECT * FROM classes WHERE modifiers=0 OR modifiers & ~0x80

这是正常的做法吗?看起来很有趣,我必须做两次检查。我的逐位逻辑可能有点生疏。

您选择的是除第8位之外的任何一位都是1的东西。只需测试位是否显式为0:
where(modifiers&0x80)=0

最好屏蔽(&)您期望的值,这样其他值是什么都不重要(包括它们是否为零)。我假设(您不指定)接口修饰符
是第八位

例如:

SELECT * FROM classes WHERE modifiers &0x80=0x00;
所以这里我们要说的是,如果第8位没有设置,那么我们很好。。。任何其他位(0或1)都无关紧要示例测试用例:

SELECT 0x00 &0x80=0 FROM dual; //True
SELECT 0x7F &0x80=0 FROM dual; //True
SELECT 0x80 &0x80=0 FROM dual; //False
SELECT 0x8F &0x80=0 FROM dual; //False
(0x00当然可以缩短为0