为什么是-128~127而不是-127~128

许多同学可能都知道java的基础数据范围以及是如何计算的

一个byte占8个比特位故一整个byte应该是可以表示2^8次方的数也就是256个数

书本上给的范围是-128 ~127也确实是占据了256个数

但不晓得大家有没有思考过为什么偏偏是-128~127 而不是 -127~128 

想要理解这范围的划分,我们要先知道计算机至存储的二进制方式是补码。

这里简单提一下  原码  反码  补码的概念

byte类型占8个比特位,第一个位为符号位,剩下的表示数据。

当这个数为正数时 它的原码第一个符号位为0

当这个数为负数时 它的原码第一个符号位为1

正数的原码 反码  补码都一样

如:10(假设为byte型类型)的原码、反码、补码都为 0000  10010

而负数的反码和补码就要由原码推导出来。

具体规则为 反码由原码所有位取反得到,补码由反码加1得到。

如: -5 的原码为 1000  0101  (假设这个-5为byte类型,byte类型为一个字节占8个比特位) 

那么-5的原码先转换为反码 那么反码顾名思义它的所有位(除了第一个符号位)都取反(0变1,1变0)  得到5的反码为1111  1010  

 再把5的反码加1得到5的补码 即 1111  1011

如此大家可以轻松知道正数的补码最大也就是到0111 1111 也就是127

然后发现好像-128的补码好像溢出了

-127的补码为1000 0001 

那么-128的补码应该为-127补码再减去1 得到1000 0000

实际上大家可能会发现0实际上会有 +0 (0000 0000)和-0 (1000 0000)

这里也可以看做是把-0的二进制值拿来表示了-128

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值