问题不在于你要存储的数值大小,而在于你要存储的精确值的多少。举个例子:
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 ....总之,重点不在范围,而在精确值的个数。
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 ....总之,重点不在范围,而在精确值的个数。
解决方案 »
- 新人求助:关于论坛里的一点资料
- vassdk_soap.jar
- java中的java.land包在哪,怎么找不到,如果要下在哪下,详细?
- 困扰我两天的例题,请兄弟们赐教!
- MyEclipse 6.0.1GA版本编辑JSP经常崩溃
- 哪位★娇娃★帮我解释一下“com.sun.*”属于什么包?
- 做一个应用程序,如何设置一次就能让所有控件,比如菜单,button,textarea等所有的字体保持一致呢,而不用写一个button,就设置一个呢?谢
- 怎样缩放在Applet中画的图
- jb5和appserver的entity bean question 能者多捞 80!
- 随机24字节Byte Array通过base64编码获得32字节字符串
- 线程同步
- 分布式理解
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)));
}
}
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,只用到了十二位
向两位学习了~
我只想到了通过把16位的数通过位移什么的分成两个8位的byte,具体代码没想好呢就看到已经出来了。
数组加密以后别处能用到