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