【问题标题】:MariaDB Bitwise AND (&) operationMariaDB 按位与 (&) 运算
【发布时间】:2018-01-31 12:28:52
【问题描述】:

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

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

'architecture & 2 = 2';

适用于架构 21

'architecture & 2 != 2';

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

【问题讨论】:

  • 请使用括号来说明在 [in] 相等测试之前已完成屏蔽:(architecture & 2) = 2.

标签: mysql sql mariadb


【解决方案1】:

一般x & m = m检查掩码m的所有位都设置在x的值中。

22的二进制表示是101102,而21的二进制表示是101012。当您将 x & 2 掩码应用于 22 时,您会得到 2,因为从右数第二位的二进制位设置为 22。因此,architecture & 2 = 2 将是 true

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

【讨论】:

  • 你的意思是说 architecture & 2 != 2 会是 FALSE?
  • @Shatru 不,这是真的,因为0 != 2
【解决方案2】:

架构字段应存储按位和。

如果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。所以,是真的。

【讨论】:

    【解决方案3】:

    用过的

    AND 运算符。

    你可以看到AND and OR logical

    where 2=2 是真的

    你可以像 1,2,4,8 这样转成二进制...

    【讨论】:

    • 不过,此链接不会指向 mariadb 或 mysql 文档。在 MariaDB 中,它是按位运算符 (documentation)。
    猜你喜欢
    • 2018-01-28
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2023-04-04
    • 2016-04-12
    • 1970-01-01
    相关资源
    最近更新 更多