侧边栏壁纸
博主头像
Xin Xu博主等级

瞎折腾浪费时间最在行!

  • 累计撰写 2 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

剑指Offer

Xin Xu
2024-01-27 / 0 评论 / 0 点赞 / 10 阅读 / 2245 字

long的长度和范围,为什么最大值要减1?

我们先来复习一下Java的8种基本数据类型

  • 6种数字类型:

    • 4种整数:byte、short、int、long
    • 2种浮点:float、double
  • 1种字符型:char

  • 1种布尔型:boolean

这8种基本数据类型的默认值及大小如下:

基本类型位数字节默认值范围
byte810-128 ~ 127
short1620-32768(2^15) ~ 32767(2^15 - 1)
int3240-2147483648(2^31) ~ 2147483647(2^31 - 1)
long6480L-9223372036854775808(2^63) ~ 9223372036854775807(2^63 - 1)
char162u00000 ~ 65535(2^16 - 1)
float3240f1.4E-45 ~ 3.4028235E38
double6480d4.9E-324 ~ 1.7976931348623157E308
boolean1falsetrue、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

评论区