java中位运算

今天 突然发现 ,处理数据实在太大,一个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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值