病例是一些常量,每种病定义个值,分别为1,2,4,8,16;然后多种病的情况也可以存到一个int里面,
请问这个位压缩技术是怎么实现,通过java
楼主你好,有多种方法可以实现,下面说一种方法:
java中int是32位有符号数,最大值为1111111111111111111111111111111(31个1,转化为十进制为2147483647)最小值为10000000000000000000000000000000(1个1+31个0,转化为10进制为-2147483648)
如果将每一位代表一个病例,那么一个整型数就可以代表多个病例了。但是这种方法最多只能有32个病例了,超过32中,就没办法了。
比如说将第一位表示病症A,第二位表示病症B,第三位表示病症C,
如果一个人同时得了A,C病症,那么可以用10100000000000000000000000000000表示,转化成10进制也就是:-1610612736;
如果一个人同时得了C病症,那么可以用00100000000000000000000000000000表示,转化成10进制也就是:536870912
楼主可以通过循环,构造一个2进制字符串,再通过下面方法将它转化为10进制
java中2进制字符串转化为10进制的方法为:
BigInteger b = new BigInteger("10100000000000000000000000000000",2);
Integer i = b.intValue();//注意如果所传自付字符串超过32位,那么intValue方法会从右边截取32位进行计算。
基于此,根据一个整型数获取病人得的病按照以下方法计算。
//先将Integer 转化为2进制字符串: