java中byte类型表示范围为什么是-128~127?

byte类型由一个字节即8位二进制数组成,比如01111111表示正数1.首位表示符号位,0表示正数,1表示负数.

计算机内的数据都是以补码来储存的,正数的补码是本身,负数的补码就是反码加1.

反码是人计算补码的,规定正数的反码是本身,负数的反码是符号位不变,其余位取反.

计算机的计算只有加法计算,比如2-3会等价于2+(-3),

2的源码是00000010,补码是00000010,

-3的源码是10000011,反码是11111100,补码是11111101,

计算机中两者补码相加,即00000010+11111101=11111111;

而-1的补码正好是11111111.

但是这样一来会出现10000000和00000000两个补码都表示0,一个+0,一个-0,而数学只有一个0,多出的一个补码怎么办呢?

于是印度阿三就人为规定10000000作为-128的补码;这也刚好符合计算机补码计算规则.

例如-128+127,即补码1000000+01111111=11111111,即-1;

实际上8位二进制原码只能表示-127~127,即11111111~01111111;

8位补码才能表示-128~127,即人为规定10000000为-128的补码.


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值