关于java的byte取值范围,一定给分 10

关于java的byte取值范围,一定给分byte取值范围127到-128第一位是符号位01111111这个是127我懂那么最小负数应该是11111111等于-127啊。为... 关于java的byte取值范围,一定给分byte取值范围 127 到 -128
第一位是符号位
0111 1111这个是127我懂
那么最小负数应该是1111 1111等于-127啊。为什么是-128。网上查了好多都看不懂
展开
 我来答
推理推晕创意
2019-07-24 · TA获得超过144个赞
知道答主
回答量:17
采纳率:100%
帮助的人:2.7万
展开全部
关于byte字节范围理解
首先规定二进制的头位为符号位,0为正,1为负
符号位用红色标记一下
则下面的数01111111和00000000代表:

0 1 1 1 1 1 1 1 = + 127 =2^0+2^1+2^2+2^3+2^4+2^5+2^6= 2^7-1(公式就不推啦)

0 0 0 0 0 0 0 0 = + 0

正数已经规定好了而且二进制计算也对应相应的数计算(如1+1=2对应 00000001+00000001=00000002)

这下就差规定负数了
还剩下 1 0000000到1 1111111的代表没有规定
1 1 1 1 1 1 1 1 =?
1 0 0 0 0 0 0 0 =?

这里就发现二进制0 0000000代表0了,那1 0000000代表什么?代表 -0 ?这样不是浪费资源而且不合理?

肯定有人想那 1 0000000规定-1 ,1 1111111规定-128不就好了嘛。
但是这就不符合对应的数计算啦 (如0-1代表0 0000000-0 0000001=?等于-1吗?明显感觉哪里不合理啊)

可以看到正数计算都是符合对应的数计算,那么0 1111111代表的127在加一会怎么样?
可以看到0 1111111+0 0000001=1 0000000
那么1 0000000代表着什么数呢?
程序员就规定这个数代表着-128,那么怎么来的呢。

先从0 0000000为突破口。意外发现
1 1111111(8位)+0 0000001(8位)=1 0 0000000(9位)而最头位不存储的话只剩下0 0000000,而这个数不是代表着0吗。那么只有-1+1等于0了。所以规定了1 1111111代表着-1.

-1-1=-2(1 1111110)
-2-1=-3(1 1111101)
-3-1=-4(1 1111100)
·························。。。。。。。。。。。
-127-1=-128(1 0000000)
所以就规定了1 0000000为-128
结论就是:
0 1 1 1 1 1 1 1 +127
0 0 0 0 0 0 0 0 +0

1 1 1 1 1 1 1 1 -1
1 0 0 0 0 0 0 0 -128
这样计算就符合了对应代表数的计算,但是负数的二进制就没法从原来的公式推出来了
于是有了补码

补码原则:符号位不变,先减一,其它位再相反可以了;
补码如:
1 1 1 1 1 1 1 1 符号位不变

1 1 1 1 1 1 1 0 减一

1 0 0 0 0 0 0 1 再相反位

这个就可以用原来的公式推出代表着-1啦,以上就是本人自己的理解啦,主要为了简明易懂。其次符号位算入其中不严谨,可能有错还望指出。
刑初素5
2017-09-19 · TA获得超过311个赞
知道小有建树答主
回答量:165
采纳率:69%
帮助的人:140万
展开全部

java中用补码表示二进制数,补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数。

  1. byte为一字节8位,最高位是符号位,即最大值是01111111,因正数的补码是其本身,即此正数为01111111,十进制表示形式为127

  2. 最大正数是01111111,那么最小负是10000000(最大的负数是11111111,即-1)

  3. 10000000是最小负数的补码表示形式,我们把补码计算步骤倒过来就即可。10000000减1得01111111然后取反10000000,所以最小负数是-128

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式