求助 mysql & 运算符是什么意思, 怎样解释

2020-04-08 10:07:40 +08:00
 gyinbj

select id from Table where id = '888888' and (ext_type & 4 = 4 )

这句话后面的(ext_type & 4 = 4 ) 要怎样解释?

数据存储是 1 2 4 8 的和 15

用于判断 1 2 4 8 是否符合这 4 个权限

4542 次点击
所在节点    MySQL
9 条回复
Presbyter
2020-04-08 10:10:24 +08:00
关键词“8421 码”,“逻辑运算”.
gyinbj
2020-04-08 10:10:54 +08:00
@Presbyter 没太懂。
PTLin
2020-04-08 10:18:16 +08:00
判断第三位是否被置位
no1xsyzy
2020-04-08 10:19:40 +08:00
位运算作 bit test
老的 C 甚至是 asm 的做法了
caola
2020-04-08 10:25:31 +08:00
位运算符:& 按位与, | 按位或, ^ 按位异或
otakustay
2020-04-08 10:51:36 +08:00
这是 bit enum 或者 flag enum,搜一下能找到比较详尽的资料
dapang1221
2020-04-08 10:55:56 +08:00
那个 4 换成二进制是 0100,和 ext_type 做与运算,相当于把 ext_type 的第三个 bit 位提取出来,再判断这一位是不是 1

不过 mysql 位运算会全表扫描,这条 sql 有限定 id 了倒是不会全表扫
shaoyijiong
2020-04-08 20:30:23 +08:00
字面含义二进制计算 得到的结果十进制后再比较
0100 (4)
&
0100 (4)
-----
0100 (4)
Aresxue
2020-04-09 10:59:15 +08:00
把十进制转成二进制就看出规律了, 0100,相当于取第三位, 这个做法比较老但还算常见, linux 的常用权限 755, java 里面对于修饰符的判断都有用到

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/660327

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX