long类型最大值为9,223,372,036,854,775,807、最小值为−9,223,372,036,854,775,808,是64位有符号整数,必须用l后缀或long.max_value等常量定义,不可用科学记数法避免精度丢失。

long 类型的最大值是 9,223,372,036,854,775,807,最小值是 −9,223,372,036,854,775,808。 它们都是 64 位有符号整数,用二进制补码表示,因此精确值固定,不依赖浮点近似。
long 最大值的科学记数法
9,223,372,036,854,775,807 ≈ 9.223372036854775807 × 10¹⁸ 这是精确整数,但若需简写常用形式,可取三位有效数字: → 9.22 × 10¹⁸(适用于估算、文档说明或日志摘要)
long 最小值的科学记数法
−9,223,372,036,854,775,808 ≈ −9.223372036854775808 × 10¹⁸ 同样,工程或教学场景中常简化为: → −9.22 × 10¹⁸
注意:科学记数法不改变 long 的本质
long 是整型,不是浮点类型,它本身不支持科学记数法存储。所有以 1e18 或 9.22e18 形式写的字面量在 Java/C# 中默认是 double 类型,直接赋值给 long 会编译报错(除非显式强制转换,且数值必须在范围内并可精确表示)。
- ✅ 正确:
long max = 9223372036854775807L; - ❌ 错误:
long max = 9.22e18;(编译失败,类型不匹配) - ⚠️ 危险:
long x = (long)9.223372036854775807e18;(double 可能无法精确表示该整数,导致截断误差)
为什么不用科学记数法定义 long 常量?
因为 double 类型只有约 15–17 位十进制有效数字精度,而 long 最大值有 19 位。例如:
-
9223372036854775807L是精确整数 -
(long)9.223372036854775807e18在 double 中可能被近似为9223372036854775808.0,强转后变成错误值
所以实际编码中,始终使用带 L 或 l 后缀的十进制整数字面量,或直接调用 Long.MAX_VALUE / Long.MIN_VALUE。











