Java中Long 最大值+1最小值-1问题

废话不都说,先上代码

    String max = Long.MAX_VALUE + "";
    String maxPlus = (Long.MAX_VALUE + 1) + "";

    Printer.println("" + max + " --> max");
    Printer.println("" + maxPlus + " --> max plus");
    Printer.println(Long.parseLong(maxPlus) + " --> long parse");

运行结果是:

9223372036854775807 --> max
-9223372036854775808 --> max plus
-9223372036854775808 --> long parse

这。。??最大值加了1之后瞬间变最小值?就是这么神奇,堪称魔术。
下面就来一步一步揭开魔术的神奇面纱(其实也就是反码 补码 XD)

Long 的最大值
十进制为:9223372036854775807
十六进制为:0x7fffffffffffffff
二进制为:01111111 11111111 11111111 11111111(首位为符号位,0为正,1为负)

ok,二进制有了,咱们来+1试试
01111111 11111111 11111111 11111111 + 0001 =
10000000 00000000 00000000 00000000
将此结果转换成10进制就是:-9223372036854775808

啰嗦了这么多,不知道有没有说清楚,有同学会问了,说好的最小值-1问题呢?难道你是那种万恶的标题党吗?
当然不是,最小值-1问题就留给各位机智的同学当作练手了,这里就不贴上来饿了 XD,道理是一样的

你可能感兴趣的:(Java中Long 最大值+1最小值-1问题)