基本数据类型是怎么决定范围的呢?
基本数据类型相信大家都很熟悉,但是基本数据类型怎么决定范围的呢?
下面就让我带着大家了解一下基本数据类型是怎么决定范围的~
(:开口就老UC了
———————————————————正文分割线————————————————————
相信很多人对下面的这张图并不陌生,详细的记录着每个数据类型的内存占用字节数和其取值的范围。
…那么他们是如何通过字节数来确定其范围的呢?
我们只需记下面这句话:
一字节表示八位,即:1byte = 8 bit,bit存储内容是0或1
以byte来举例子,一个byte有8个bit,一共可以存储8个0或1,所以其最大值为8个bit都是1的时候。
1 1 1 1 1 1 1 1
也许你会有些疑惑,1 1 1 1 1 1 1 1转换成十进制不是255吗?怎么byte的最大值是127呢?
了解为什么之前,我们首先要有以下的概念:
整数分为有符号和无符号两类,而在二进制中,由于只能使用0或1来进行表示,所以把最左边的这一位变成了符号位,1代表负数,0代表正数,剩下的就是这个数的绝对值部分。
有符号数:
1-------------------------------------------1 1 1 1 1 1 1
(我是符号位,表示这个数是负数)0-------------------------------------------1 1 1 1 1 1 1
(我是符号位,表示这个数是正数)
无符号数:
1 1 1 1 1 1 1 1(没有符号位,全都表示值)
所以无符号数最大可以表示到255,最有符号数只能到127。
由于byte为有符号数,可以表示正负,最大值其实就是0 1111111,转换成二进制就是127
问题又来了,按照上面说法byte最小值应该是1 111 1111,最左边为符号位,那这个不是应该等于 - 127吗?
我们先来看看byte正数所能表示的范围:
0 000 0000 ----> 0 111 1111 == + 0 ----> + 127
byte负数所能表示范围:
1 000 0000 ----> 1 111 1111 == - 0 ----> - 127
这个时候我们会发现 -0 和 +0其实都是同一个东西,都是0。所以计算机将1 000 0000定义为-128。
我们观察上面的表就能发现,凡是有正负范围的,负数最大范围都会比正数的多1,就是因为有 -0 的存在,让负数的范围可以比正数多 1。
总结起来就是:
补码比原码和反码多一位的原因是因为原码和补码是区分正0和负0的,而补码不需要区分,这个空出来的位置用来表示比正数范围大1的数。
补充:在二进制中,负数要转换成十进制所要做的工作比正数多:
原码: 计算机中将一个数字转换为二进制,并在其最高位加上符号的一种表示方法。
反码:根据表示规定,正数的反码就是其本身,而负数的反码是符号位不变,其余各位取反。
补码:根据表示规定,正数的补码就是其本身,而负数的补码是其反码+1。
第一步:将负数的绝对值转为二进制原码
第二步:求其原码的反码
第三步:求得的补码即负数的二进制表示结果
需要注意的是:-128没有原码和反码,因为超出了范围,只有补码。
一个byte的原码和反码范围均为-127~+127
负数的补码除了上面的原码取反加1这种做法之外,还可以通过补码的定义:
[ X ]补 = 模-| X |
模是什么?
由于计算机只有加法器,没有减法器,所以计算机内减法只有转化为加法才能存储。而用补码代替原码,可把减法转变为加法。而进行运算中出现的进位就是模,此时的进位,就应该忽略不计。
正如我们熟悉的时钟,时钟显示共有十二个小时,时针旋转一周后回到原来的状态,实际的数学意义没有变化。
但是就单单论数学模型意义来讲,该计时系统的模为12,也就是说,时针顺时针转8圈和逆时针转4圈,效果是一样的。为了符合数学意义,顺时针为+8,逆时针为-4,综上所述: 得 |+8|+|-4|=12
在二进制下,有多少位数参加运算,模就是在 1 的后面加上多少个 0。
我们看回上面的式子:
[ X ]补 = 模-| X |
-128的补码为:
1000 0000(补码) = 1 0000 0000(模) - 1000 0000(-128的绝对值)
—————————————————————————————————
(:如有错误敬请指出~
本篇文章只是对概念进行简单的概括,我找到一篇十分详细的博客,有兴趣的同学可以读一下这篇关于 -128 ,+128,-0,+0,-1 的反码补码
参考:
https://blog.csdn.net/weixin_38357164/article/details/87912475
https://zhidao.baidu.com/question/484367560.html
https://www.bilibili.com/video/BV1rV411k7Xf?p=21