java 2个int 用位压缩技术保存到一个int里面

病例是一些常量,每种病定义个值,分别为1,2,4,8,16;然后多种病的情况也可以存到一个int里面,
请问这个位压缩技术是怎么实现,通过java

1=00000001
2=00000010
4=00000100
8=00001000
16=00010000
应该看明白了吧
1=1
2=2
3=1+2
4=4
5=1+4
6=2+4
7=1+2+4
8=8
9=1+8
....

可以了理解为每种病例是通过在2进制中所处位置区别的
1=最后一位
2=倒数第一位
...
那么多种病例就可以一个int表示了如 00010011 表示病例1+病例2+病例5等
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-08
位示图(bit-map)。
第2个回答  2014-04-08

楼主你好,有多种方法可以实现,下面说一种方法:


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进制字符串:
Integer i = 536870912;
String bstr = i.toBinaryString(i);
//然后遍历bstr的每一位:
int index = 1;
for(char c : bstr.toCharArray()){
    if(c.equals('1')){
        System.out.println("病人得了编号为"+index+" 的病症");
        //DO SOMETHING ELSE
    }
    index ++;
}

大家正在搜