工作收获:判断二进制中含有几个1 ,并且1对应的结果位置为开启以及其他小收获

package com.test;

import java.math.BigInteger;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;

public class testa {
    public static void main(String[] args) {
        //1、十进制转二进制
        System.out.println(Integer.toBinaryString(134217727));
        //2、时间格式转换
        DateFormat formatTo = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = "Tue May 01 21:41:20 CST 2018";
        //Tue May 01 21:41:20 CST 2018
        DateFormat formatFrom = new SimpleDateFormat("E MMM dd hh:mm:ss z yyyy", Locale.ENGLISH);
        Date date;
        try {
            date = formatFrom.parse(dateStr);
            System.out.println(formatTo.format(date));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //3、MAP集合循环输出
        Map<String,String> map = new LinkedHashMap<String,String>();
        map.put("1","aaa");
        map.put("2","bbb");
        map.put("3","ccc");
        map.put("4","ddd");
        map.put("5","eee");
        System.out.println("删除之前:"+map.size());
        Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<String, String> entry = it.next();
            it.remove();
        }

        for(String s:map.keySet()){
            System.out.println("key : "+s+" value : "+map.get(s));
        }
        System.out.println("MAP集合删除之后的长度:"+map.size());


        /**
         * 4、二进制转十进制思想,二进制对应位置中含有1的位置为true
         */
        //1、油站信息增加班结模块配置,各模块以复选框方式呈现,最终结果以二进制转十进制方式保存【PS:已勾选的为1,未勾选的为0】
        //2、每个模块放置的顺序定下来后就不能更改,后台需记住每个模块的位置【PS:位置即下标,下标从1开始】
        //3、不明白的可以上网百度找下资料,这个文章也可以参考【https://blog.csdn.net/ti_o0o/article/details/48806135】

        /**
         * 举个栗子
         * 假设四个模块及勾选状况是这样的【a,b,c,d】【0,0,1,1】
         * 保存这个配置时,将0011转为十进制,转换后值为3,即数据库保存的值为3
         * 需注意的是,保存的下标是从右往左开始算,右边第一位的下边为1,寄刚四个模块对应的下标为【a-4,b-3,c-2,d-1】
         * 下面用代码展示一下
         */
        //11 10 10 11 10 11 10 11 11 11 11 11 01
        // 二进制转十进制
        BigInteger bi = new BigInteger("111111111111111111111111111", 2);
        Integer config = Integer.parseInt(bi.toString());
        System.out.println("二进制转十进制:"+config);
        // 定义四个模块下标
        //        int a = 4, b = 3, c = 2, d = 1;

        //1的二进制是0001
        /*
         * 1 << (a - 1)代表1的二进制左移3位
         * 有两种表示方法:
         *  第一种:
         * 首先把1转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0001,然后把该数字高位(左侧)的3个零移出,其他的数字都朝左平移3位,
         * 最后在低位(右侧)的3个空位补零。则得到的最终结果是 0000 0000 0000 0000 0000 0000 0000 1000,则转换为十进制是8.
         * 第二种:
         * 数学意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
         * 所以a_index=2的三次方
         */
        // 判断a模块开启状态
        int a_index = 1 << (26 - 1);
        System.out.println((a_index & config)>0);
        /*a_index & config是位运算
         * 将a_index & config转换为二进制进行位运算
         * 两个运算的操作数位都为1,结果为1,不然结果为0
         * 比如:8的二进制是1000,4的二进制是0100
         * 位运算:
         * 1000
         * 0100
         * ----
         * 0000
         * 结果为0,说明false
         * 10与2的位运算如下
         * 1010
         * 0010
         * ----
         * 0010
         * 转换十进制2
         * 比如:a的位置是4,则a_index的固定值是8,
         * config是复选框中的二进制转十进制的值
         * 
         */
        for(int i=6;i>0;i--){
            int index= 1 << (i - 1);
            if((index & config)>0)
            {
                System.out.println(i+"的位置开启状态:"+ ((index & config)>0));
            }else{
                System.out.println(i+"的位置开启状态:"+ ((index & config)>0));
            }
        }

    }
}
个人原创,转载请注明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值