又是数据类型,研究这个你要先明白内存分布。
一个内存单元就是一个关合线路,关为0,合为1,你可以把一个内存单元看做是一个格子 ,里面有电就是1没电就是0.每一个单元格子,被称为一个位,8个位是一个字节,
INT型:
一个int是4个字节,就是4*8=32个盒子,根据这32个盒子里有的没电有的有电,来代表一个2进制数。因为是32个开关,所以最大数是32个1,因为java中没有unsigned也就是无符号类型,所以第一个1必须用来代表是正数还是负数(1为负0为正)剩下31个1用来代表值,31个1转为十进制就是2147483647,最小是-2147483648,正数尾数是7,负数是8,因为还有一个0,算在正数里,正数和负数正好相同。
double型:
一个double是8个字节也就是8*8=64个盒子,其中第一位用来代表是符号位(1为负0为正),后面11位是指数位,其余52位是有效数字位,符号位就代表正负的没啥说的。指数位就是科学计数法中的E。记得应该是高中数学有教吧。指数位越大小数点越向左移,越小越向右移。有较数字位并不是说的最大值,说的是可以代表的最精确最长位数,double的有较位好像是15到16位吧,记不清楚了
int型根本就没有指数位,你怎么让他代表小数,double转int,从一个有指数转到一个没指数,小数能不丢才怪。
另外一般情况下float就够用了,有6到7位的有较数字,double比float大一倍,内存占用了多了一倍,运算速度上double也慢很多,没必要的情况下一般不使用。
|