假设这样一个场景:
            我们的数据库里设计了一张表A,里面储存用户的基本信息,有一个字段叫YWZL,用于存储业务种类。这个字段被定义为一段二进制字符串,如:
    011010,表示用户未订阅业务一,已订阅业务二,已订阅业务三,依次类推。。。
     
            假如现在我们要对用户业务进行订阅和退订的操作,普通的处理办法就是,找到业务对应字符,进行替换操作。大可不必如此!
    利用位操作,从执行效率和逻辑上都是非常清楚,简明扼要的。
     
    订阅
    /**
    *按位或操作进行订购,例如:我目前拥有的业务代码是ruleSMSType:011011,
    *如果我要订阅剩下的第0和第3号业务,那么我需要的代码是ruleSMSType:100100,
    *对代码进行按位与操作后,代码将填充所有的业务代码变为111111
    */
    public static String Order(String ruleSMSType, String dbSMSType){
      int ruleInt = Integer.parseInt(ruleSMSType, 2);
      int dbInt = Integer.parseInt(dbSMSType, 2);
      return addPreBits(Integer.toString(ruleInt | dbInt, 2), dbSMSType.length());
     }

     
    退订
    /**
    *按位与操作进行退订,接上面:我目前拥有的业务代码是dbSMSType:111111,
    *如果我要退订剩下的第0和第3号业务,那么我需要的代码是ruleSMSType:011011,
    *对代码进行按位与操作后,代码将填充所有的业务代码变为011011
    */
    public static String unOrder(String ruleSMSType, String dbSMSType){
      int ruleInt = Integer.parseInt(ruleSMSType, 2);
      int dbInt = Integer.parseInt(dbSMSType, 2);
      return addPreBits(Integer.toString(ruleInt ^ dbInt, 2), dbSMSType.length());
     }

     补位
    /** 
    * 
    * 补位,位数不足,则在前面补0 
    */ 
    private static String addPreBits(String orgStr, int size){ 
    int addNum = size -orgStr.length(); 
    String preStr =""; 
    for(int i = 0; i<addNum; i++){ 
    preStr +="0"; 
    } 
    return preStr + orgStr; 
    }

    本位为风林火山博客原创,转载请注明出处http://flcoder.com/articles/2014/11/10/1415608470246.html
    本文为风林火山博客原创,转载请注明出处:www.flcoder.com