MariaDB按位AND(&)操作

时间:2018-01-31 12:28:52

标签: mysql sql mariadb

在我的项目中,32和64位的产品软件架构分别存储在表21和22中,用于各种产品。

我遇到了一个SQL,其中' where '子句提到架构22

'architecture & 2 = 2';

for architecture 21

'architecture & 2 != 2';

我无法理解上述语句的重要性以及2 = 2在此SQL中的作用?

3 个答案:

答案 0 :(得分:2)

通常x & m = m会检查掩码m的所有位是否都设置为x的值。

22的二进制表示是10110 2 ,而21的二进制表示是10101 2 。当你将x & 2掩码应用到22时,你会得到2,因为右边的两位,第二位被设置为22,因此architecture & 2 = 2将是true

当您将相同的测试应用于21时,您将返回零,因为右侧的第二位未设置,因此architecture & 2 != 2将为true

答案 1 :(得分:1)

那是用过的

  

AND运营商。

您可以看到AND and OR logical

where 2=2这意味着真实

您可以转为二进制,如1,2,4,8 ...

答案 2 :(得分:1)

架构字段应存储按位求和。

如果architecture = 22的值表示architecture = 2+4+16

如果architecture is 21的值表示architecture = 1+4+16

对于按位求和,考虑值的范围:1,2,4,8,16,32,64 ...

所以,表达式

'architecture & 2 = 2';

是检查数字2是否存储在架构字段中。

如果architecture is 21结果为0.那么,是假的。

如果architecture = 22结果是2.那么,是真的。