今天 突然发现 ,处理数据实在太大,一个long类型占用了太多空间,领导给了建议使用位运算,记录操作数据的id,怎么使用java好几年了,但是这个还是不会,好不容易学了点,赶紧记下,回去好好啃书去。
?
public void yu() {
long a = 123456789012345678L;
// long 类型的数据是64为的,分为高位和低位,前4个字节是高位 后四个字节是低位,
// a 右移32位,实际上是指,就是获得了 a 的 前四位的值,
long a1 = a >> 32;
// 使用 0x 代表前边有多个0,具体有几个0 这样解释 : 比如这里 使用的是 0xffffffffL ,这里表示 前边有8个零
// 一个 f 代表 4位 一个字节 ,两个 f代表 8位 代表 2两个字节,这里8个ff 表示4个字节,
// 这里使用的long 类型 ,一共是 8个字节, 8个ff代表4个字节, 那剩余的前四个字节 ,就是用0x来表示,所以这里一共有8个零
// ? ?用 a 与 0xffffffffL 做 ? 与 运算, 如果a中的位数是 零的话 还的零,是 1 ?的话 ?,这里参考 & 运算
long a2 = a & 0xffffffffL;
System.out.println(a);
System.out.println("高位:" + a1 + "\t低位:" + a2);
?
// 将 原来的 移到地位的数据 在左移32 位,到高位,加上原来的低位 就可以得到原始值了
long b1 = a1 << 32;
long b2 = b1 + a2;
System.out.println(b2);
}
?
以上代码运行结果:
初始化:123456789012345678
高位:28744523低位:2788225870
还原:123456789012345678
?