3

我有一个带有位掩码列(无符号整数)的表。该字段的值有 1、2、4、8、16 等。

如何选择 NOT 特定值?IE 我不在乎其他位是什么 - 只是特定位为 0。

我试过的:

从 mytable 中选择 count(*);

这给了我3387255

从 mytable 中选择 count(*) where outageMask & ~8;

这给了我552061

所以我会假设:

从 mytable 中选择 count(*) where outageMask & 8;

会给我2835194。不是这样。相反,我得到87711

我究竟做错了什么?

4

1 回答 1

5

只有特定位为 0。

这个很重要。让我们看看你计算的结果(为简化起见,使用 8 位数字):

 8 = 0b00001000
~8 = 0b11110111

那么,如果您将它们与另一个值进行按位运算,这些位掩码会测试什么?第一个掩码测试是否设置了位“8”。第二个掩码测试是否设置了所有其他位。但这不是您想要的,您想要否定整个声明。这很容易:

select count(*) from mytable where (outageMask & 8) = 0;
于 2013-01-28T17:25:21.343 回答