为什么一个byte表示的数的范围是 -128 ~ 127

        计算机中带符号的整数都是用的二进制的补码,这点我们需要明确。那为什么计算机存储要用补码而不直接用原码,其实就是为了计算机自己方便运算,后面会介绍。

计算机中表示-128 ~ 127的格式如下:

0000 0000       0

0000 0001       1

   ……     ……

0111 1111        127

1000 0000      -128

1000 0001      -127

……        ……

1111 1111       -1

上面的二进制都是补码,它们是在计算机中的表示形式。

因为最高位是符号位,0表示正数,1表示负数

正数的补码和原码,反码相同,所以我们会很容易的知道 0111 1111 是127

那负数呢

比如1111 1111为什么是-1而不是-127

我们知道1111 1111 是补码,如果我们想要知道它的真实身份,就需要求它的原码

1111 1111 减 1得到反码 1111 1110  反码除了符号位 其余按位取反 得到1000 0001 现在我们就知道原来它的真实身份是-1

这里有一个特殊情况就是 1000 0000 为什么是-128 我们会发现求它的原码好像不好求 会出现错误 其实我们可以反证得到其实1000 0000  的补码和原码是一样的 

这里就会有人问1000 0000 不是表示 -0 吗?也许你是对的,但是我们已经有0000 0000 表示0 了 ,0的正负其实是没有意义的,所以我们就无须弄两个0出来,所以1000 0000 的最高位既是符号位也是数值位 表示 -128, 这是个特殊。

其实一个字节表示的数是256个 而-128 ~ 127 刚好是256个 说到这里大家有没有理解呢?

现在我们再说说为什么计算机要用补码表示一个数,我们举个例子

如果计算机用原码表示数据 则 -1 = 1000 0001        1 = 0000 0001

-1 + 1 = 1000 0001 + 0000 0001 = 1000 0010 = -2  ??? 不是等于0 吗,怎么会是-2 ,这就是计算机用原码表示时进行加减运算出的错误

我们再看看补码的形式  -1 = 1111 1111   1 = 0000 0001

-1 + 1 = 11111111 + 0000 0001 = 0000 0000 =0 我们可以看到结果是正确的

我们再举个例子 如果计算机用原码表示数据  1 = 0000 0001   -2= 1000 0010

1 + (-2)= 0000 0001 + 1000 0010 = 1000 0011 = -3  这显然是错的

如果计算机用补码表示数据 1 = 0000 0001  -2 = 1111 1110

1 + (-2)= 0000 0001 + 1111 1110 = 1111 1111  = -1

我们知道1111 1111它其实是补码,它表示的就是 -1

写到这里大家应该已经大致明白我的意思了,当然还有一些比较特殊的情况需要大家自己琢磨,而且由于自己水平有限,可能有些不正确的说法,还需要大家指出批评。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值