基本数据类型范围总结(java)
编辑long的长度和范围,为什么最大值要减1?
我们先来复习一下Java的8种基本数据类型
- 6种数字类型:
- 4种整数:byte、short、int、long
- 2种浮点:float、double
- 1种字符型:char
- 1种布尔型:boolean
这8种基本数据类型的默认值及大小如下:
| 基本类型 | 位数 | 字节 | 默认值 | 范围 |
|:-------:|:--:|:--:|:-----:|:----------------------------------------------------------:|
| byte | 8 | 1 | 0 | -128 ~ 127 |
| short | 16 | 2 | 0 | -32768(2^15) ~ 32767(2^15 - 1) |
| int | 32 | 4 | 0 | -2147483648(2^31) ~ 2147483647(2^31 - 1) |
| long | 64 | 8 | 0L | -9223372036854775808(2^63) ~ 9223372036854775807(2^63 - 1) |
| char | 16 | 2 | u0000 | 0 ~ 65535(2^16 - 1) |
| float | 32 | 4 | 0f | 1.4E-45 ~ 3.4028235E38 |
| double | 64 | 8 | 0d | 4.9E-324 ~ 1.7976931348623157E308 |
| boolean | 1 | | false | true、false |
可以看到整数类型的最大值都减1了,这是为什么呢?因为在二进制表示中,通常第一位代表符号位(0代表正数,1代表负数),其余位表示数值。
例如:byte 8位,第一位表示符号,负数用1,正数用0。
- 最小 第一位1,后面7位最小都是0,得到10000000二进制表示,转10进制就是 -128
- 最大 第一位0,后面7位最大都是1,得到01111111二进制表示,转10进制就是 127
注意:对于boolean类型,官方并没有明确定义,它依赖Jvm厂商的具体实现。逻辑上理解是占1位,但是实际中会考虑计算机高效存储因素。另外,java的每种数据类型并不会随着机器硬件架构的变化而变化,这种所占空间大小不变性也是java程序比其他语言编写程序更具有可移植性的原因。
- 0
-
分享