计算数据类型的取值范围先得了解他们的在计算机中储存空间的大小。
byte 一个字节 8个比特位
short 两个字节 16比特位
不懂大小可以百度。
计算机识别的是二进制码,
为了是计算机的运算效率更高则采用了补码的形式。(算是规定,必须是这样)
补码是什么意思呢
就好像在理解一个带小数点的数和 一个分数的意思(这两是一样的值,只是表达不一样)
{打个比方}
你在计算105*(-0.5)的时候是和你在计算105*(-1/2)的时候
那么前者算起来相对麻烦,后者直接就是-105/2。这样运算速度更快.
了解一下规定::
注意,不要问为什么!! 就好像0.5的分数表达形式是1/2一样。
二进制码最高位1代表负数,0代表正数
正数的补码等于它本身。
负数的补码等于除第一位(符号位)逐位取反然后加1
在这里提一下(负数的补码转换成原码,也是除第一位然后逐位取反然后加1)
没必要纠结原码和补码之间的转换,这都是验证过的。知道结果就行。
0111 1111 这是一个字节里面最大的整数了,因为再加1就会被计算机切掉超出字节之外的部分。
然后变成负数了...(这个值为127)
同理1111 1111就是这个数字里面最小的负数(这个值为-127)
那么取值范围应该是-127——127才对
但是这其中有两个补码的值相同 1000 0000与 0000 0000的结果都是0
------------------------------------------------------------------------------
个人理解一:
且-128的补码也显示1000 0000(按正常的补码应该但是1 0000 0000,因为储存空间有限,不能输出,显示为1000 0000)。你想想看从-127到127只有一个0,但是上面有两个补码都为0,多算了一个数肯定不对(我不知道负零这个说法有没有,我感觉没有)。
那么直接将-128默认为1000 0000的话
则取值范围就变成了-128到127,不存在两个相同的值了。
个人理解二:
负零的说法不存在 ,1000 0000出现负数的一边,应当由负数的取值范围减1。
就变成了(-127)-1 = -128。
取值范围就变成了 -128——127。
纯属个人找方法理解记忆这个取值范围。