
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 里面对于修饰符的判断都有用到 |