2是一个比较特殊的数。
2的1次方2
2的2次方4
2的3次方8
2的4次方16
2的5次方32
2的6次方64
2的7次方128
2的8次方256
2的9次方512
2的10次方1024
2的11次方2048
2的12次方4096
2的13次方8192
一个数字sum等于2的各个次方的和。
那么 sum&其中任意一个数,都等于这个数。
如:2+4+8+16+64+256=350
350&2=2
350&4=4
350&8=8
350&16=16
350&64=64
350&256=256
这样就能通过sum与某个值比如说256的位运算,然后判断sum,也就是例子中350是否包含256这个值。
我见过有人用这种位运算做权限判断。