java解决数字编码,java – 将一组三个整数编码为一个唯一的数字

根据您给出的[0,65535]范围,您的包装和拆包代码不正确.

有65,536个可能的数字,您不希望编码一个整数来更改另一个整数的编码.您应该使用一个常量设置为65536(即216).

public static final long PACK = 65536;

然后你的pack方法稍微改变为:

private long pack(long a, long b, long c) {

return (a + (b * PACK) + c * PACK * PACK);

}

这将a“打包”到长的最低16位(位49-64),b到位33-48,并且c到位17-32. (没有任何内容被打包到0-16位,所以这些位保持清零.)

此外,您的解包方法更改为:

private static long[] unpack(long packed) {

long a = (packed % PACK);

long b = (packed / PACK) % PACK;

long c = (packed / (PACK * PACK)); // Use / not %.

return new long[]{a, b, c};

}

请注意,c的操作除以PACK平方,不使用%运算符,而是使用/.否则M和N都被PACK取代.

输出有这些变化:

Packing 67, 8192, 168

Result=722091376707

UnPacking 722091376707

Result=[67, 8192, 168]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值