震惊,基本数据类型竟然是这样表示决定范围的!

基本数据类型是怎么决定范围的呢?
基本数据类型相信大家都很熟悉,但是基本数据类型怎么决定范围的呢?
下面就让我带着大家了解一下基本数据类型是怎么决定范围的~
在这里插入图片描述
(:开口就老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

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值