Integer源码中的MIN_VALUE = 0x80000000和MAX_VALUE = 0x7fffffff的分析
1.计算机的常识
(1)总所周知,计算机最底层存储的二进制数值是以补码形式存在的,这是了实现两个数的减法而设计的。
(2)举个小例子去理解补码,两个四位二进制之间的加减运算
0010(2) + 0001(1) = 0011(3)
0010(2) - 0001(1) = 0001(1)(现实中的运算)
如果是这样运算时可以不用补码的,但是事实上计算机没有减法运算器,或者说减法运算器太复杂了,总而言之就是没有减法运算器。
那么,减法只能用一个负数来代替了。于是有了符号位,第一位便是符号位。
下面有几种概念:
原码:是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。
反码:正数的反码还是等于原码负数的反码就是他的原码除符号位外,按位取反。
补码:正数的补码等于他的原码负数的补码等于反码+1。(这只是一种算补码的方式,多数书对于补码就是这句话)
在这里我们可以不用看反码,直接看补码。
2.Integer源码中的MIN_VALUE = 0x80000000和MAX_VALUE = 0x7fffffff的分析
Integer是Java中的包装类,占4字节。一共4*8=32位,由8个16进制组成。如上图所示,最小值为-8即1000,最大值为0111即0111。然后,最小值在1000全部补0即为80000000,最大值在0111后面全部补1即为7fffffff。
1000 是 -8 -2^3 那么 10000 -2^4 -16 100..000 -2^31 2147483648,补码主要是负数难理解,正数和原码差不多,补码本来也是计算机为了解决负数(减法)的存在。
仅供参考,有错误还请指出!
有什么想法,评论区留言,互相指教指教。
觉得不错的可以点一下右边的推荐哟
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端