数值类型byte的范围为什么是-128到127

(前情提要,本文章第一次涉及到的知识作讲解,后面再用不再做详细步骤)

byte

在java的数据类型中我们学到,最小的整数类型是byte,他在计算机中占用1个字节的储存空间.数值表达的范围是-128到127之间.

而现在的问题是,为什么他的数据范围是-128到127之间呢?

这个涉及到计算机的运算规则.计算机是以二进制为法则运算的,在运算中只有0和1来表达数字.

而byte能够存储1个字节的空间,换算到二进制就是8位.也就是说,byte数据类型最多储存8个0或者1.

首先,我们要知道计算机二进制到我们使用的十进制之间的换算.

十进制转换为二进制

简单表达就是"除2取余,逆序排列"

1.首先用2整除一个十进制整数,得到一个商和余数
2.然后再用2去除得到的商,又会得到一个商和余数
3.重复操作,一直到商为小于1时为止
4.然后将得到的所有余数全部排列起来,再将它反过来(逆序排列).

在这里我们用35作一个范例

然后再将余数反过来排列,得到了 100011,这就是35的二进制了

二进制换算为十进制

就需要我们用第n位上的数字(注意:这里数字是从右向左数的),乘以2的(n-1)次方,然后把每一位的数加起来

还是用这个100011来做范例

就是1*2^0+1*2^1+0*2^2+0*2^3+0*2^4+1*2^5

也就是1+2+0+0+0+32=35

现在我们研究的问题就是,8位的二进制他的范围应该是多少了

按理来说,8位的二进制最大值应该是8个1,也就是11111111了,可是我们得到的十进制数字是255,比127大了不少.

符号位

这就涉及到一个符号位的知识.实际上,在计算机的二进制运算中,最前面的一位数字它还用来表达数字的正负值:1表示负数,0表示正数.所以,我们要取到最大值,他的符号位只能是0,不然就成负数了,而这也解释了二进制是如何用来表达负数.

最大值

那么我们再来看到二进制,要想大,第一位只能是0,那后面七位最大的就应该是7个1,也就是01111111了,也就是十进制的127,那么最大值的问题我们就解决了.

最小值

然后我们来看如何取到最小值,要取到最小值,那么首先我们的第一位也就是二进制的符号位,肯定是1了,然后我们来取到7位中绝对值最大的数字,还是7个1.那么我们能得到:符号位是1,就是负的,-127

这个数字的结果和-128也对不上啊,这就涉及到了计算机运算中的另一个知识,补码与反码.

补码与反码

当计算机运算的数字是负数时候,就需要用到反码与补码了(正数就不用考虑了直接计算)

首先反码就是二进制的数字除了符号位不变,其他位的数字全部取反(1变0,0变1)

然后补码就是在反码的基础上给数字+1

了解了这一知识,我们再来看到这8个1

首先符号位是1,负数,进行反码与补码运算:

反码

补码

得到了反码1 0000000之后再+1,得到1 0000001,换算过来也就是-1

这和-128也对不上啊,细心的网友就发现了,既然反码要取反,那么最大值我们就要用最小的来表示了

最小值

首先要是个负数,那第一位符号位就是1,后面取最小的就是7个0.得到10000000

然后将这个数进行反码,符号位不变,其他位取反,得到:11111111

然后进行补码,将1111111加上个1,每一位都进2则添,就由1111111(七位)变成了10000000(八位)

然后将10000000转换为十进制,128,第一位是1,负数.得到了-128

至此,最小值-128和最大值127都已经得到.

byte类型的数据范围问题解决完成.

 

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值