废话不都说,先上代码
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,道理是一样的
网友评论