[英]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.