最近呢,在搞浮点数的问题,突然就想到了65535这个数字,悲剧的是竟然忘记了这个数字的由来..当然我是知道是代表最大值的..但是几个字节的最大值给忘了,怎么算处理的也给忘了..所以去网上重温一下二进制的计算因此才有了此帖的由来..
首先是计算机的数据表示的单位:
1位-----------> 1bit
8位-----------> 8bit = 1Byte 俗称一个字节 ,用十六进制表示就是0xMM
16位----------->16bit = 2Byte = 1Word 俗称一个字
其次是二进制的计算方法 对照着下面的例子就很容易类比到自己的计算上
值 | 位数 | 最大值 | 十进制值 |
1111 | 4 | 23 | 24-1 |
(为什么是24-1,可以参照高中的等比数列,我也忘记了.)
然后继续
char ----> 1个字节----->1111 1111------------>无符号char的话最大值28-1,有符号的char的话最大值27-1
int ------->4个字节----->1111 1111 * 1111 1111 * 1111 1111 * 1111 1111------->unsigned int的话最大值是232-1, int的话最大值是231-1
另外再附赠一个字节对照表
2n | 十进制大小(就是我们所说的几bite) | bite-->Byte-->M---->G |
20 | 1 | |
21 |
2 | |
22 | 4 | |
23 | 8 | |
24 | 16 | |
25 | 32 | |
26 | 64 | |
27 | 128 | |
28 | 256 | |
29 | 512 | |
210 | 1024 * 1K | |
211 | 2048 * 2K | |
212 | 4096 * 4K | |
213 | 8192 * 8K | |
214 | 16318 * 16K | |
215 | 32768 * 32K | |
216 | 65536 * 64K | |
217 | 131072 * 128K | |
218 | 262144 * 256K | |
219 | 1310720 *512K | |
220 | 2621440 * 1024K * 1M | |
221 | 5242880 * 2048K *2M | |
222 | 10485760 *4096K *4M | |
223 | 20971520 * 8192K * 8M | |
224 | 41943040 * 16318K * 16M | |
225 | 83886080 *32768K *32M | |
226 | 167772160 * 65536K * 64M | |
227 | 335544320 *131072K * 128M | |
228 | 671088640 *262144K *256M | |
229 | 1342177280*1310720K*215M | |
230 | 2684354560*2621440K*1024M*1G |
对照着上面的表可以看出65535 = 65536 - 1 所以是1111 1111*1111 1111 即2Byte的最大值