例如:2008 - 01 - 03
思路:
首先1字节=8位
那么3字节= 24位
| 年份最高为9999 | 可以用 2位^14表示 | 也就是14 |
| 月份最高为12 | 可以用 2^4 表示 | 也就是4位 |
| 天数最高为31 | 可以用 2^5 表示 | 也就是5位 |
结果就是14 + 4 +5 = 23位(这就是计算好的,(0.0‘)呵呵)
public void threeBit() {
//y ->14位 m->4位 d->5位
int y = 2008, m = 1, d = 3;
byte[] save = new byte[3];
// 按照年月日的顺序存入24位中
y = y;
// 月左移14位放在年的高位上
m = m << 14;
// 日左移(14 + 4)位放在月年的高位上
d = d << (14 + 4);
// 做或运算 就将这个合并到23位中了
int swap = y | m | d;
// 0xff = 11111111 也就是8位,然后做与运算就可以得到这8位了
save[0] = (byte) (swap & 0xff);
save[1] = (byte) (swap >> 8 &

本文介绍了如何将8位数的日期字符串(如2008-01-03)存储到长度为3的字节数组中,并详细解释了反向取出日期的算法过程,包括年取14位,月取4位,天取5位的逻辑,以及在处理过程中对符号位的处理方法。

252

被折叠的 条评论
为什么被折叠?



