数据存储
1.如何存储
缓存:CPU GPU – 容量小,存储时间短(计算时存储)
内存:内存条 – 程序运行时存储
外存:硬盘 U盘 光盘 – 容量大,存储时间长
2.二进制
每一个0或者1表示的是电路的通断
每一个0或者1叫做二进制的位[bit比特位]
在分配内存的时候不能一个位一个位的分配,至少每次分配8个位(一个字节byte),字节是计算机最小的有意义的存储单位.
十进制的正整数–>二进制: 不断除2,取余数,再将余数倒过来
byte a=59 ---> 00111011
二进制–>十进制 :从低位开始依次用当前位的数字乘以2的n次方,n从0开始的连续的整数,将乘积相加,得到十进制的数字
00111011 ---> 59
3.区分正负数
Java中采用最高位作为符号位 0表示正 1表示负
00000000 01111111
0 ~ 127
10000000 11111111
-128 ~ -1
快速进行二进制和十进制转换的方法
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
59 = 32+16+8+2+1
00111011
十进制的正整数转成二进制,不停的除2,取余数,再将余数倒过来,得到的二进制叫做这个整数的二进制原码.
计算机中采用的是二进制的补码来表示整数的
正数的补码和原码相同
负数的补码 = 对应正数的原码的反码+1
//-59的二进制
先计算-59对应的正数59的 原码: 00111011
反码: 11000100
+1 : 11000101
-59的二进制是:11000101
二进制的计算要和十进制的计算完全一致
-59 + 59 = 0
11000101 + 00111011 = 0
11000101
+00111011
----------
100000000
4.浮点数的存储方式
20.5
1.先将整数部分转成二进制
除以2取余数,直到商为0
20 --> 10100
2.将小数部分转成二进制
乘以2,取整数部分,直至积为0
0.5*2=1.0 1
0.0*2=0 0
3.将整数部分的二进制和小数部分的二进制拼到一起
20.5=10100.1
4.将二进制采用科学计数法表示
20.5 = 10100.1 = 1.01001E4
5.将指数部分转成二进制
20.5 = 10100.1 = 1.01001E4 =1.01001E100
float 32位 第1位是符号位,接着8位是指数位 最后23位是尾数位
1.01001E100 是一个正数,符号位0
指数100,先将指数+0111111得到10000011
尾数只存储小数部分01001,后面加0补齐23位
float 20.5 = 0 10000011 01001 000000000000000000
double 64位 第一位符号位,接下来11位是指数位,尾数位52位