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 个权限
1
Presbyter 2020-04-08 10:10:24 +08:00
关键词“8421 码”,“逻辑运算”.
|
3
PTLin 2020-04-08 10:18:16 +08:00
判断第三位是否被置位
|
4
no1xsyzy 2020-04-08 10:19:40 +08:00
位运算作 bit test
老的 C 甚至是 asm 的做法了 |
5
caola 2020-04-08 10:25:31 +08:00
位运算符:& 按位与, | 按位或, ^ 按位异或
|
6
otakustay 2020-04-08 10:51:36 +08:00
这是 bit enum 或者 flag enum,搜一下能找到比较详尽的资料
|
7
dapang1221 2020-04-08 10:55:56 +08:00
那个 4 换成二进制是 0100,和 ext_type 做与运算,相当于把 ext_type 的第三个 bit 位提取出来,再判断这一位是不是 1
不过 mysql 位运算会全表扫描,这条 sql 有限定 id 了倒是不会全表扫 |
8
shaoyijiong 2020-04-08 20:30:23 +08:00
字面含义二进制计算 得到的结果十进制后再比较
0100 (4) & 0100 (4) ----- 0100 (4) |
9
Aresxue 2020-04-09 10:59:15 +08:00
把十进制转成二进制就看出规律了, 0100,相当于取第三位, 这个做法比较老但还算常见, linux 的常用权限 755, java 里面对于修饰符的判断都有用到
|