如果Java的 long 原始数据类型是64位有符号整数,那么为什么Java docs表明static long
最大值是2 ^ 63-1?是否有更大的原因影响Java中的其他原始数据类型?
我正在学习Java,我对这种差异真正感到好奇。谢谢。
答案 0 :(得分:2)
Java的long
类型确实是64位整数,但它也是签名的。
使用64位,您可以表示2 ^ 64个不同的数字。如果忽略所有负数,则最大值为2 ^ 64-1,最小值为0. 0加上所有2 ^ 64-1正数总共为2 ^ 64个数字。
但是,如果你考虑所有负数和正数,那么2 ^ 64个不同数字中的大约一半将是负数。 Java只选择代表2 ^ 63个负数,数字0和2 ^ 63-1个正数。如果你添加所有这些,你会得到2 ^ 64个总数。
2^63 + 1 + 2^63 - 1 = 2^64
^
|
this is the number zero
答案 1 :(得分:0)
它只是一个范围公式,就像八进制和十六进制数字2^n -1
的范围一样
有符号和无符号数字不同。 2^n
和2^n-1
(范围)