byte的取值范围-128~127原理

我们都知道byte为8位二进制数据,最高应该是11111111,为255(10进制)。但是为什么byte的取值范围为-128~127呢?
因为不管是Int类型还是byte类型,当用二进制定义整数时候,其最高位是符号位。如此01111111代表byte范围正数的最大值127,11111111代表byte范围最小值-127才对。如此发现还是不对!

经查资料得知,计算机内存是以二进制补码的形式保存所有的数据的
原码:直接将一个数值转换为二进制数。最高位是符号位。
负数的反码:是对原码按位取反,只是最高位(符号位)确定为1。
负数的补码:其反码加1.
而正数的原码,反码,补码都相同。

观察其公式,写几个例子
正数:
+8的原码为00001000 反码为00001000 补码为00001000
+9的原码为00001001 反码为00001001 补码为00001001

负数
-9的原码为10001001 反码为11110110 补码为11110111
-8的原码为10001000 反码为11110111 补码为11111000

可得知规律值,原码,补码,不管是正数还是负数,值与补码同步加减1.

因此,计算机byte存值补码值01111111,因为正数三码合1,所以补码对应的原码数字也为01111111转为十进制是127。如果127+1,补码值同步+1,会循环到00000000值为0正数最小了。所以byte范围的最大值127。

以上可知byte范围最大值是127,那推测最小值是不是-127呢。我们拿-127去计算
原码为11111111,
反码(取反)为10000000,
补码(反码+1)为10000001
可知-127的存值补码为10000001。
根据规律可推断出-128的补码值为10000000,-129的补码值为11111111。
而拿补码11111111反推导(-1并取反)得原码为10000001,发现它其实是-1的补码,而不是-129,因此byte范围的最小值为-128。

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值