zoukankan      html  css  js  c++  java
  • & 运算的实际运用

    背景:

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

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

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

  • 相关阅读:
    usaco contest
    chapter 2.getting started
    几种常见排序
    [usaco]Programming Contest Problem Types
    回溯实现组合问题
    第二章:循环结构程序设计
    第一章:程序设计入门
    第三章:数组和字符串
    数据库设计(一对一、一对多、多对多)
    linux与windows回车换行符的区别
  • 原文地址:https://www.cnblogs.com/junbaba/p/14719291.html
Copyright © 2011-2022 走看看