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

2020 年 4 月 8 日
 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 个权限

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

不过 mysql 位运算会全表扫描,这条 sql 有限定 id 了倒是不会全表扫
shaoyijiong
2020 年 4 月 8 日
字面含义二进制计算 得到的结果十进制后再比较
0100 (4)
&
0100 (4)
-----
0100 (4)
Aresxue
2020 年 4 月 9 日
把十进制转成二进制就看出规律了, 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