这是大计基学的东西,主要在于编码和存储。编码那部分之前讲过了。关于不同编码的介绍
先要理解一下这里基础的前提:
- 在计算机内部数据的存储和运算都采用二进制;
- 计算机中数据分为有符号数和无符号数,对于有符号数,计算机规定用最高位来表示符 号。“0”表示正数,“1”表示负数;
- Java中的数据都是有符号数;
- 计算机中带符号的整数都是使用二进制的补码。
从计算机存储,补码的角度理解
这里8bit表示有符号数。0正1负。
对于正数。最大数为:01111111 = +127,并且由于正数补码是自身,所以存储在计算机中也是
01111111。
对于负数,能表示的最小二进制是 10000000。但是这个是存储在计算机中的补码,求原码为:10000000,换算成十进制,就是128,符号位前移,即为-128。
从二进制发明的角度理解
其实一切都在于对0的处理。
在二进制中,一个+0表示为:00000000;一个-0表示为:10000000。这样就会有两个0,所以从一开始二进制发明的时候,就规定: -0 为 -128,按照补码的规则(如上面),刚刚是ok的。所以最终 -128~127.
一图理解
最终结论是 -2^bit ~ +2^bit-1