java把8位数的日期字符串存进一个长为3的字节数组里面,再转出来也能是存进去时的字符串
答案:3 悬赏:0
解决时间 2021-01-12 20:59
- 提问者网友:鐵馬踏冰河
- 2021-01-12 12:05
java把8位数的日期字符串存进一个长为3的字节数组里面,再转出来也能是存进去时的字符串
最佳答案
- 二级知识专家网友:酒醒三更
- 2021-01-12 12:13
大小3的byte数组时24位
日最大是31日,2的5次方最大32,所以 5 位可以表示全部日期
月最大是12月,2的4次方最大16,可以用 4 位表示月份
年份姑且认为最大是9999年,2的14次方可以满足,用14位来表示年份
所以byte数组中,14+4+5 可以表示全部年月日
public static void main(String[] args) throws DocumentException {
int year = 2018; // 011111100010
int month = 4; // 0100
int day =23; // 00010111
byte[] date = new byte[3];
year = year<<9; //日和月需要9位
month = month<<5;
//存日期
int temp = year | month | day; // 000011111100010 0100 10111
date[2] = (byte) (temp & 0xff); //temp的低8位与1111 1111 与运算,即 10010111 & 11111111
date[1] = (byte) (temp>>8&0xff);//temp的中8位
date[0] = (byte) (temp>>16&0xff);//temp的高8位
//取日期
int dayN = date[2];
dayN = dayN&0x1F; //00011111
//月份需要byte[1]中的低1位与byte[2]中的高3位组合
int monthN = (((date[1] & 1)<<8 | (date[2]&0xE0))&0xffff)>>5;
// 111100000000 | 11000100,年份需要byte[0]与byte[1]的7位拼成,因为月份值只取了byte[1]的低1位,所有只需要右移1位
int yearN = (((date[0]&0xff)<<8 | (date[1]&0xFE))&0xffff)>>1;
System.out.println(yearN+"年"+monthN+"月"+dayN+"日");
}
日最大是31日,2的5次方最大32,所以 5 位可以表示全部日期
月最大是12月,2的4次方最大16,可以用 4 位表示月份
年份姑且认为最大是9999年,2的14次方可以满足,用14位来表示年份
所以byte数组中,14+4+5 可以表示全部年月日
public static void main(String[] args) throws DocumentException {
int year = 2018; // 011111100010
int month = 4; // 0100
int day =23; // 00010111
byte[] date = new byte[3];
year = year<<9; //日和月需要9位
month = month<<5;
//存日期
int temp = year | month | day; // 000011111100010 0100 10111
date[2] = (byte) (temp & 0xff); //temp的低8位与1111 1111 与运算,即 10010111 & 11111111
date[1] = (byte) (temp>>8&0xff);//temp的中8位
date[0] = (byte) (temp>>16&0xff);//temp的高8位
//取日期
int dayN = date[2];
dayN = dayN&0x1F; //00011111
//月份需要byte[1]中的低1位与byte[2]中的高3位组合
int monthN = (((date[1] & 1)<<8 | (date[2]&0xE0))&0xffff)>>5;
// 111100000000 | 11000100,年份需要byte[0]与byte[1]的7位拼成,因为月份值只取了byte[1]的低1位,所有只需要右移1位
int yearN = (((date[0]&0xff)<<8 | (date[1]&0xFE))&0xffff)>>1;
System.out.println(yearN+"年"+monthN+"月"+dayN+"日");
}
全部回答
- 1楼网友:酒安江南
- 2021-01-12 12:49
java.util.Date 方法getTime返回是long,,,,虽然不是3字节,但可以用3字节保存
转回来,看Date的构造
~~~~~~~~~~~~~追问代码呢,大佬
转回来,看Date的构造
~~~~~~~~~~~~~追问代码呢,大佬
- 2楼网友:轮獄道
- 2021-01-12 12:37
哥们儿,这应该是面试时的机试题吧!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息