背景:
订单有很多标识,比如是否特价/是否公司担保/是否预留等等标记。然后在某段逻辑需要判断的时候,可能判断某单是不是具备某个标识,或者哪几个标识。
但是不想用集合来存,于是用一个表标识来存。
eg:
所有的标志都用2的多少次幂的值表示,比如 1 [0001]-特价 2 [0010]-公司担保 4[0100] 8[1000] 等等,特征就是换成二进制后,除了某个位上为1,其他都为零。
假如要判断某个标志是否含有特价标识,这个时候外部传来的提前 set 的表示 3 [0011]. 则公式为 (3 & 1) == 1 返回true,说明3这个标志含有特价标志
假如还要判断这个标志是否含有公司担保标志,这个是同样 3 [0011]. 则公式为 (3 & 2) == 2 返回 true,说明3这个标志含有公司担保标志. [1+2 = 3,所以两个标志都含有]
原理:(a & b) == b
首先一个前提就是b 是2的n次幂的值,因为这样就能保障二进制只有一个1,其他都是零,这样就导致前面的&运算,把其他位都干成了0,只有a所在的那个位是1 的话,才能得到它本身
,这样的话再== 。就知道a 有没有包含b 了。