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,道理是一样的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.你自已决定是否需要有正负: 就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个...
    Xiho丶阅读 6,579评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,064评论 19 139
  • IP地址的分类(记住) IP地址分为A类、B类、C类、D类、E类,规定如下: A类:网络位8位,主机位24位,网络...
    Arya鑫阅读 14,442评论 1 18
  • 目录 1、八种基本数据类型 八种数据类型分别是:(整数型) byte,short,int,long,(浮点型)fl...
    AnchEvil阅读 5,589评论 0 0
  • 1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或...
    哈哈哎呦喂阅读 3,954评论 0 0

友情链接更多精彩内容