int和long类型取值范围。
1. int类型 ---------4字节(32位)
------------------------------------------------------------------------------- 范围
①(无符号整型) -------------- unsigned int ***************************** 0 ~ 4294967295(2^32-1)
②(有符号整型)(一般省略signed) int ********** -2147483648(-2^31) ~ 2147483647 (2^31-1)
有符号,最高位是一个符号位,1代表负数,0代表正数,所以是31位,再减1,是因为正数还有个0。
2. long类型 ---------8字节(64位)
范围: long -9223372036854775808(-2^63) ~ 9223372036854775807(2^63-1)
【例1】
Long long1 = 2147483648;
- 错误
- 默认是int类型,2147483648为int类型,但是报错了,类型不匹配,而且超出int类型范围
Long long2 = (long)2147483648;
- 正确 , 2147483648本来就是int类型,强制类型转换成了long类型
- 因为long的范围大,可以装下
【例2】
Long long1 = 2147483648L;
- 正确
- 在后面加L, 说明定义时就是long类型了,,没有写,就是默认int类型
3. 还有其他的一些范围(8中基本数据类型),只要记住类型的 字节数(乘以8 = 位数),就可以自己计算范围了。
在低字节转高字节时自动转换类型:byte < short < char = int < long , float < double
数据类型 | 字节数 | 二进制位数 | 范围 | 规律 | |
---|---|---|---|---|---|
整 型 | byte | 1 | 8 | -128 ~ 127 | -2^7 ~ 2^7-1 |
整 型 | short | 2 | 16 | -32768 ~ 32767 | -2^15 ~ 2^15-1 |
整 型 | int | 4 | 32 | -2147483648~ 2147483647 | -2^31 ~ 2^31-1 |
整 型 | long | 8 | 64 | -9223372036854775808 ~ 9223372036854775807 | -2^63 ~ 2^63-1 |
浮点型 | float | 4 | 32 | -3.4E-38 ~ 3.4E+38 | 科学计数法: -3.4E-38表示-3.4×10^(-38) |
浮点型 | double | 8 | 64 | -1.7*10(-308)~1.7*10(308) | |
字符型 | char | 2 | 16 | 0~65535 | 0~2^16-1 |
布尔型 | boolean | 1 | 8 | true或false | true或false (java中没有0和1) |
注: long型后如果不加L则默认为int型,浮点型如果不加F则默认为double型
4. 浮点型
类型 | 指数长度 | 尾数长度 |
---|---|---|
float | 8 位 | 23 位 |
double | 11 位 | 52 位 |
float类型为例:
从高位到低位排列
符号位:占一位,1表示负数,0表示正数
指数位:8位,二进制转换位转换成十进制后再减去127,即为指数。
尾数位:23位
同理,double 占8个字节,存储方式:1位符号位 + 11位指数位 + 52位尾数位