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。
仅供参考,有错误还请指出!
有什么想法,评论区留言,互相指教指教。
觉得不错的可以点一下右边的推荐哟