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));
}
}
}
}
个人原创,转载请注明出处