[英]Ampersand (&) operator in MySql WHERE Clause
这一段有什么作用? (xyz & 192 > 0)在
SELECT * FROM table WHERE (xyz & 192 > 0)
192由两个值64 + 128创建
xyz可以是: 1,2,4,8,16,32,64,128 ... 或其中一些值的总和,例如64+128
这是按位与运算符:
https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html#operator_bitwise-and
它对两个参数中的每一对位执行 AND 运算:
https://en.wikipedia.org/wiki/Bitwise_operation#AND
并且比 > 具有更高的优先级
https://dev.mysql.com/doc/refman/8.0/en/operator-precedence.html
INTERVAL
BINARY, COLLATE
!
- (unary minus), ~ (unary bit inversion)
^
*, /, DIV, %, MOD
-, +
<<, >>
&
|
= (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN, MEMBER OF
BETWEEN, CASE, WHEN, THEN, ELSE
NOT
AND, &&
XOR
OR, ||
= (assignment), :=
(xyz & 192 > 0) 检查和 xyz 是否将元素 64 和/或 128 作为其值
这不是一个答案。
Chris & Tom 的回答结合起来解释了它。
但我想知道按位与运算符如何导致不同的数字。
with recursive NUMS (num) as ( select 1 as num union all select num+1 from NUMS where num < 575 ) select min(num) minNum, max(num) maxNum , (num & 192) as chk from NUMS group by chk, cast((num - MOD(num, 64))/64 as unsigned)
\n最小数量 | 最大数量 | 查克\n -----: | -----: | ——:\n 1 | 63 | 0\n 64 | 127 | 64\n 128 | 191 | 128\n 192 | 第255话 192\n 第256话第319话 0\n 320 | 第383话 64\n 第384话第447话 128\n 第448话第511话 192\n 第512话第575话 0\n
db<> 在这里摆弄
所以好吧, (xyz & 192 > 0)
可以用来验证 xyz 是否在 64 到 255 之间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.