Byte的数值范围为何是-128到127

Byte的数值范围为何是-128到127

一、原码、反码和补码

在探讨Byte的数值范围为何是-128到127这个问题前,首先要了解原码、反码和补码的概念。对于一个数字,计算机要使用一定的编码方式进行存储。原码、反码和补码是计算机存储一个具体数字的编码方式,并且最高位(第一位)存放符号,正数为0,负数为1。

1.原码

原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。这里真值表示最高位不存放符号且参与到计算中。

[+1] (原) = [0000 0001]

[-1 ] (原) = [1000 0001]

因为第一位是符号位,所以8位二进制数的取值范围就是:

[1111 1111, 0111 1111] 即[-127, 127]

原码是人脑最容易理解的和计算的表达方式。

2.反码

反码的表示方式是:

正数的反码是其本身

负数的反码是在其原码的基础上,符号位不变,其他依次取反

[+1] = [0000 0001] (原) = [0000 0001] (反)

[-1 ] = [1000 0001] (原) = [1111 1110] (反)

3.补码

补码的表示方式是:

正数的补码就是原码本身

负数的补码就是其反码加1

[+1] = [0000 0001] (原) = [0000 0001] (反) = [0000 0001] (补)

[-1 ] = [1000 0001] (原) = [1111 1110] (反) = [1111 1111] (补)

二、为何要使用原码、反码和补码

首先,让计算机辨别“符号位“会使计算机的基础电路设计更加复杂,于是人们就想出让符号位参与到计算的方法。我们知道,根据运算法则,减去一个正数等于加上这个数的负数,即1 - 1 = 1+ (-1) = 0。所以机器没有减法,只有加法,这样计算机运算就更加简单了。

原码

计算十进制的表达式:1 - 1 = 0

1 - 1 = 1 + (-1) = [0000 0001] (原) + [1000 0001] (原) = [1000 0010] (原) = -2

显然这个结果是错误的。为了解决这个问题,于是就出现了反码。

补码

计算十进制的表达式:1 - 1 = 0

1 - 1 = 1 + (-1)

= [0000 0001] (原) + [1000 0001] (原)

= [0000 0001] (反) + [1111 1110] (反)

= [1111 1111] (反)

= [1000 0000] (原) = - 0

发现用反码的计算减法,结果的真值绝大部分是正确的,而唯一的问题是出现在“0”这个特殊的数值上。虽然人们理解+0和-0是一样的,但是0带上符号是没有任何意义的。而且会有[0000 0000] (原) 和[1000 0000] (原) 两个编码表示0。于是补码的出现,就解决了这个问题。

补码

计算十进制的表达式:1 - 1 = 0

1 - 1 = 1 + (-1)

= [0000 0001] (原) + [1000 0001] (原)

= [0000 0001] (补) + [1111 1111] (补)

= [1 0000 0000] (原)

= [0000 0000] (原)= 0

由于Byte只能存储8位,这里 [1 0000 0000] (原) 最高位的”1“溢出,取尾8位,即[0000 0000] (原)。这样0用[0000 0000] 表示,而且可以用[1000 0000] 表示-128。

计算十进制的表达式 :- 1 - 127 = -128

-1 - 127 = (-1) + (-127)

= [1000 0001] (原) + [1111 1111] (原)

= [1111 1111] (补) + [1000 0001] (补)

= [1 1000 0000] (补) = -128

同理最高位的”1“溢出,取尾8位,即[1000 0000] (补)。[1000 0000] 为什么用“(补)”而不是“(原)”呢?因为实际上是使用-0的补码来表示-128的。并且对-128的补码[1000 0000] (补)计算出来的原码是[0000 0000] (原) = 0,这是不正确的。使用补码,不仅修复了0的符号以及存在两个编码的问题,并且还能表示一个最小数,这既是Byte的数值范围是[-128, 127]的原因。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值