薛定谔的猿

薛定谔的猿

基本数据类型范围总结(java)

34
2023-03-03

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