关于byte储存-128的问题

首先,byte的存储范围是-128到127,那么是怎么做到的呢,我觉得这一个解释方法可以解释。

首先,一个8位2进制的数可以表示的范围是0到255,即【0000 0000】到【1111 1111】,那么我们把最左边的一位看做是正负号的标示,那么正数的范围是【0000 0000】到【0111 1111】,即0到127.负数的范围是【1000 0001】到【1111 1111】,即-127到-1,。

这个时候我们会发现,【1000 0000】这个数究竟代表什么数好呢,如果把它看做是-0,好像不大合适,那么,我们就要看看从二进制的数的补码的意义。

补码即是把二进制的减法转化为加法来进行计算,如果相加得出的数超出了8位,那么即舍去最高位,如果把舍去后的最高位看做是一个数,这就相当于我们做的运算是在0到255之间循环,假如超过了255,即转化为0到256之间的一个数,比如计算的结果是257,那么就相当于0到255的结果的2。

现在我们解决了数据溢出的问题,然后把最高位看做是正负号的标示,也就相当于我们把取值范围从0到255转移到了-127到127之间,但是还有一个【1000 0000】表示什么呢?那么我们看看两个数之间的转换规律:

我们先把128剔除(因为它的二进制数是【1000 0000】),把原本的数设为a,转换后的数设为b,然后他们之间有一个关系:

公式1:当0<=a<128时,b=a;(b为整数)

公式2:当128<a<=255时,b=a-256;(b为负数)

其实他们二进制的标示就是最高位的差别。

那么假如说把128考虑进去,它的二进制数是【1000 0000】,很明显它不符合整数的命名规范,只能是负数了,而运用公:2,它只能表示为-128(尽管128不在取值范围里面,但也只能扩张公式2的取值范围而不是扩张公式1的取值范围),也就是说,范围是0到255里面的128,到了范围是-127到127里面的数,没有对应的数,只能把范围扩大,即范围扩大到-128到127。

78        原码:【0100 1110】   反码:【0100 1110】   补码【0100 1110】 

-123    原码:【1111 1010】   反码:【1000 0101】   补码【1000 0110】

正数的原码、反码、补码都相同,负数的反码是原码的除符号位外的数都取反,补码是反码加1。

-123的补码如果直接转换为2进制的数的话是133,刚好满足公式二:-123=133-256。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值