位运算

xiaoxiao2021-02-27  349

import java.util.ArrayList; import java.util.List; import cn.com.duiba.tuia.core.api.enums.AppFlowStrategySwitchEnum; /**

 * 位运算

主要是在一个字段里面存储多个开关。如:0表示策略开关,1福袋开关,2代表地域开关。

策略开就是 1<< 0。二进制就是001,关就是000,110等

福袋开就是1 << 1。二进制就是010,关就是000,101等

 * date: 2017年4月18日 下午2:24:35 <br/>  *  * @author chencheng  * @version  */

public class SwitchesUtil {

//判断开关是否开

    public static int switchChange(int switches,int bit){         int v = 1 << bit;         int ret = switches & v;         return ret == 0 ? 0 : 1;     }          /**      * 所有开启此开关的值      *      * @param bit      * @return      */     public static List<Integer> switchOpen(int bit){         List<Integer> list = new ArrayList<Integer>();         int all = AppFlowStrategySwitchEnum.values().length;         int max = (1<<all) -1;         int v = 1 << bit;         for (int i = 0; i <= max; i++) {             if ((i&v) > 0) {                 list.add(i);             }         }         return list;     }          /**      * 所有关闭此开关的值      *      * @param bit      * @return      */     public static List<Integer> switchClose(int bit){         List<Integer> list = new ArrayList<Integer>();         int all = AppFlowStrategySwitchEnum.values().length;         int max = (1<<all) -1;         int v = 1 << bit;         for (int i = 0; i <= max; i++) {             if ((i&v) == 0) {                 list.add(i);             }         }         return list;

    }

      /**      * 开关置为开      *      * @param opType 开关值      */     public void grantOpSwitches(int opType) {         int v = 1 << opType;         switches = switches | v;     }     /**      * 开关置为关      *      * @param opType 开关值      */     public void ungrantOpSwitches(int opType) {         int v = 1 << opType;         v = ~v;         switches = switches & v;     }     /**      * 开关是否开      *      * @param opType      * @return      * @since JDK 1.6      */     public boolean isOpSwitches(int opType) {         int v = 1 << opType;         int ret = switches & v;         return ret != 0;     }

     }
转载请注明原文地址: https://www.6miu.com/read-3381.html

最新回复(0)