关于java的byte取值范围,一定给分 10
关于java的byte取值范围,一定给分byte取值范围127到-128第一位是符号位01111111这个是127我懂那么最小负数应该是11111111等于-127啊。为...
关于java的byte取值范围,一定给分byte取值范围 127 到 -128
第一位是符号位
0111 1111这个是127我懂
那么最小负数应该是1111 1111等于-127啊。为什么是-128。网上查了好多都看不懂 展开
第一位是符号位
0111 1111这个是127我懂
那么最小负数应该是1111 1111等于-127啊。为什么是-128。网上查了好多都看不懂 展开
2个回答
展开全部
关于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啦,以上就是本人自己的理解啦,主要为了简明易懂。其次符号位算入其中不严谨,可能有错还望指出。
首先规定二进制的头位为符号位,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啦,以上就是本人自己的理解啦,主要为了简明易懂。其次符号位算入其中不严谨,可能有错还望指出。
展开全部
java中用补码表示二进制数,补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数。
byte为一字节8位,最高位是符号位,即最大值是01111111,因正数的补码是其本身,即此正数为01111111,十进制表示形式为127
最大正数是01111111,那么最小负是10000000(最大的负数是11111111,即-1)
10000000是最小负数的补码表示形式,我们把补码计算步骤倒过来就即可。10000000减1得01111111然后取反10000000,所以最小负数是-128
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询