首页 > 技术文章 > & 运算的实际运用

junbaba 2021-04-29 18:47 原文

背景:

  订单有很多标识,比如是否特价/是否公司担保/是否预留等等标记。然后在某段逻辑需要判断的时候,可能判断某单是不是具备某个标识,或者哪几个标识。

  但是不想用集合来存,于是用一个表标识来存。

  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 了。

推荐阅读