问题不在于你要存储的数值大小,而在于你要存储的精确值的多少。举个例子:
int和float都是32bit,但是一个存储的范围[-2,147,483,648~2,147,483,647],一个的范围(不考虑精确度)却是正负无穷。但是,他们能精确对应的值的个数都是一样的2的32次方个。
同样,你的例子,你只有16bit,只要你想存储的精确值个数不超过65536个,那就有可能(顶多读写时候步骤多一点,计算复杂点)。反过来,如果要存储的精确值超过65536个,那就是Mission Impossible比如,你要存储的32768~65536或者32768~50000,那就把0000 0000 0000 0000(16个二进制0)映射为32768,0000 0000 0000 0001 当作32769 ....总之,重点不在范围,而在精确值的个数。

解决方案 »

  1.   

    byte数组就行吧,两个字节最大FFFF可以保存到65535这么大的数
      

  2.   

    用字节数组就可以了。下面写了一个两位字节数组与int互转的方法供你参考。public class Test { public static void main(String[] args) {
    byte[] b = getBytes(32769);
    System.out.printf("%d,%d\n", b[0], b[1]);
    int i = getInt(b);
    System.out.println(i);
    } public static byte[] getBytes(int data) {
    byte[] bytes = new byte[2];
    bytes[1] = (byte) (data & 0xff);
    bytes[0] = (byte) ((data & 0xff00) >> 8);
    return bytes;
    } public static int getInt(byte[] bytes) {
    return (int) ((0xff & bytes[1]) | (0xff00 & (bytes[0] << 8)));
    }
    }
      

  3.   

    楼主 利用数据加密的思想不知道可以么? Integer i=32767;

    System.out.println(i.toBinaryString(i).length()); 

    char [] arr={' ','0','1','2','3','4','5','6','7','8','9','A','B','C','D','E'};
    StringBuffer sb=new StringBuffer();
    while(i!=0){
    System.out.println((i>>4)&0x0f); 
    char c=arr[(i>>4)&0x0f];
    sb.append(c);
    i>>=4;
    }
    System.out.println(sb.toString());
    }
    打印的结果为 EE6,只用到了十二位
      

  4.   


    向两位学习了~
    我只想到了通过把16位的数通过位移什么的分成两个8位的byte,具体代码没想好呢就看到已经出来了。
    数组加密以后别处能用到