数据库
首页 > 数据库> > mysql / bitmask:选择NOT值

mysql / bitmask:选择NOT值

作者:互联网

我有一个带有位掩码列的表(unsigned int).该字段的值为1,2,4,8,16等.

如何选择NOT特定值? IE我不关心其他位是什么 – 只是特定位为0.

我尝试过的:

select count(*) from mytable;

这给了我3387255.

select count(*) from mytable where outageMask & ~8;

这给了我552061.

所以我认为:

select count(*) from mytable where outageMask & 8;

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

我究竟做错了什么?

解决方法:

only that a specific bit be 0.

这个很重要.让我们看看,你计算了什么(简化为8位数):

 8 = 0b00001000
~8 = 0b11110111

那么,如果你用另一个值BITWISE和它们,这些位掩码会测试什么?第一个掩码测试是否设置了位“8”.第二个掩码测试是否设置了所有其他位.但这不是你想要的,你想要否定整个陈述.这很容易:

select count(*) from mytable where (outageMask & 8) = 0;

标签:mysql,bit-masks
来源: https://codeday.me/bug/20190901/1782230.html