byte的最小值为什么是-128,而不是-127?

常识:一个byte数据在计算机中是8位,byte是有符号的,也就是说最高位是符号位,其余7位是数值位。所以1个byte的最大值是:01111111=127。按理说,最小值应该为11111111B=-127才对呀,但是很多官方或权威的书明确提到最小值是-128,这究竟是为什么呢?困扰了我很久。

首先,这里还有一个常识大家要知道,数字在计算机中存储和计算用的都是数字的补码,为什么要这么设计呢?

我们可以用反证法,假设数字计算使用的是原码,比如-1+1,应该等于0才正确,-1+1用转成原码以后进行计算:00000001 +10000001 =10000010 =-2,这就和常识违背了。

为了解决这些实际问题,同时为了CPU的物理结构上更简单(电路上用二极管三极管实现加法器已经很麻烦了,再去实现减法器是不现实的。计算机科学家早就设计好用加法来代替减法了)。因此在计算机存储数据的时候都是存的数据的补码,CPU在计算数据的时候,不是简单的相加。所有数据都要转换成它的补码进行计算。正数的源码反码补码都是其自身,但是负数却发生了改变。

例如:10000001是-1的原码,反码为11111110,补码为1111111。最终计算时都用补码计算,也就是1+(-1)=00000001+11111111=(1)00000000也就是0。这就解决了二进制中-1+1不等于0的问题。

那-128究竟是怎么来的呢?

正数部分的取值范围,最终的补码(正数源码反码补码是一样的)00000000B-01111111B也就是0-127。

负数部分的补码为10000001-11111111,转回到原码应该是11111111-10000001十进制为-127 -(-1)

到这里没懵逼吧,最重要的一点来了。补码里面还有一个没有用。它就是10000000B

这个没法转成原码反码了,直接规定10000000B这个补码对应的是-128。这就是神奇的-128的来源

当然原码为(10000000B)是没有任何意义的。原码的-0没有意义,补码的-0有意义在有符号数里表示-2的(n-1)次方。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值