当前位置: 代码迷 >> 综合 >> 使用二进制计算标志位
  详细解决方案

使用二进制计算标志位

热度:31   发布时间:2024-01-20 17:44:37.0

需求:ABC三个按钮,分别有两种状态,计算任意按钮打开的所有状态

分析:很明显,这是个状态判断,用二进制为表示再合适不多;那么三位二进制,最大是7,我们只要遍历所有的数字是否包含这个开关就好了

二进制举例:A 是001,B是010,C是100 ,那么A打开的所有数字就是 001,011,101,111

OK,上代码

public class BinaryUtil {/*** 使用3bit表示3种房源端*/private static final int all_type = 3;private static final int AN_JU_KU = 1;private static final int SOU_FANG = 1<<1;private static final int BEI_KE = 1<<2;public static void main(String[] args) {long l = System.currentTimeMillis();System.out.println(calNums(all_type,SOU_FANG));System.out.println(calNums(all_type,AN_JU_KU));System.out.println(calNums(all_type,BEI_KE+SOU_FANG));System.out.println("cost:"+(System.currentTimeMillis()-l));}public static List<Integer> calNums(int allType,int flag){int max = max(allType);List<Integer> list = new ArrayList<>(max);for (int i = 1; i < max; i++) {if(check(i,flag)){list.add(i);}}return list;}/*** 计算指定位数的最大数字** @param i* @return*/public static int max(int i) {return (int) Math.pow(2, i);}/*** 是否包含某个数** @param source 原数字* @param flag   比对数字* @return*/public static boolean check(int source, int flag) {return (source & flag) == flag;}}

  相关解决方案