详细帮我分析下1个字节时,java中 -128是怎么得到的

我知道涉及了补码,我就想知道怎么就由11111111得到了-128

这个是取值范围的问题,利用溢出来实现负数的运算。
二进制数分为有符号二进制和无符号二进制,其中无符号二进制的一byte取值范围是-128到127
第一位(最高位)用来表示符号,0是正数,1是负数,全0肯定是0了。全1就表示负数的最小值。追问

全1 是最小值 ,可-128怎么来的

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-02-23
1 1111111

1111111

------------
110000000=-128
前面的1是负号追问

。。。 说详细好么

追答

计算方法:
只算负数
原码:负数的原码为1|x|
反码:负数的反码,符号位不变,数值取反
补码:负数的反码加1(会影响符号位)
范围解疑
这里以byte为例来解释一下取值的范围。byte占一个字节,是8位。如果是无符号类型的整数,那么原码最大值11111111,所以原码范围就是0---255(也就是0~~2^8-1),总共256个数。
对于有符号类型的byte值,那么原码最大值应该是01111111(第一位的1代表负数符号),最小值应该是11111111,所以原码范围是(-127~-0 +0~127),总共256个数。但是在有符号原码进行加减运算时的问题(原码运算不正确,反码出现+0、-0),所以出现了补码。对于十进制:127 + 1 = -128 ,补码算法:01111111 + 00000001 = 10000000 ,这里的10000000原码就是-0,所以在计算机中1000000的补码表示的就是 -128。需要注意的是:-128是没有原码和反码的,只有补码!

总结:
1>补码的设计目的是:
⑴ 使符号位能与有效值部分一起参加运算,从而简化运算规则。补码机器数中的符号位,并不是强加上去的,是数据本身的自然组成部分,可以正常地参与运算。
⑵ 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。
2>反码是原码与补码转换的一个中间过渡,使用较少。
3>所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、c等其他高级语言中使用的都是原码。

对于一个负数,它的表示形式非常简单,即用这个负数所对应的正数的二进制数取反然后加1,即可得到这个负数的二进制表现形式。

 

 

说明:取反的意思是将当前二进制数位上的1变0,0变1。

本回答被提问者和网友采纳
第2个回答  2018-02-22
2^8=256,
最高位是符号位,0 0000000~0 1111111 (0~127) 一共128
1 0000001~1 1111111 (-1~-127) 一共 127 128+127=255
那么还有一种情况呢?
其实0分为+0和-0, +0我们已经用0 00000000表示了
而-0则为 1 0000000, 因为补码的原因 -0(即1 0000000)=-128

详细帮我分析下1个字节时,java中 -128是怎么得到的
这个是取值范围的问题,利用溢出来实现负数的运算。二进制数分为有符号二进制和无符号二进制,其中无符号二进制的一byte取值范围是-128到127 第一位(最高位)用来表示符号,0是正数,1是负数,全0肯定是0了。全1就表示负数的最小值。

一个byte是1个字节,能表示的数的范围是-128~127.请问,这是为什么呢?
它的数值绝对值应该是各位取反再加1,即为 0 1 1 1 1 1 1 1 + 1 = 1 0 0 0 0 0 0 0 = 128 又因为是负数,所以是 - 128 而最大数是正数,原码和补码一样 所以是 +127

一个字节中,-128。怎么从原码转变为补码?
码长八位时,-128 既没有原码,也没有反码。所谓的:原码取反加1,就是无处下手的。其实,求负数的补码,方法步骤,极其简单。就是:先用绝对值减一,再取反。就完事了。那么,就是:127 = 0111 1111。取反,即为:1000 0000,这就是-128 的补码。

在计算机中一个字节的有符号数的最小值是-128,这个数值是怎么计算出来...
在计算机中有符号数是用补码表示的,8bit的数的补码是从10000000 - 01111111,把它转化成十进制的数就是-128 - +127

为什么字长为一个字节时,补码(200)8所代表的十进制数是-128?
补码范围是-128~127,反码的范围才是-127~127 而且(200)8换成二进制是10000000,因为是补码,换成十进制是等于-64

c语言 1个字节 范围为什么是 -128 — 127,-128怎么算的
正数一个字节最大只能是127,128超过了一个字节能表示的最大值,127是01111111,加1, 00000001等于 10000000,最高为是2的7次方等于128,由于一个字节的最大值是127,所以128就只能是-128,但是这里的符号位应该是补全的码,由于只有一个字节看不到 ...

一个带符号位的字节为什么是-128到127,我就想知道-128怎么来的
到”表示:0:00000000。正数:第一个数字是0,最后七个二进制数字是正数的绝对值 负数:首先是1,把所有的位颠倒过来,加1,也就是负数的绝对值 所以根据上面的陈述,版本10000000是一个负数(第一位是1)如果我们取未加权的1,结果仍然是10000000,大小是128,所以1000,0000=-128。

java中为什么byte的取值范围为-128~127
java中的byte是有符号整形,1字节,8位,最高位是符号位,只有7位用来表示数值 最大值:01111111b=127 即2的7次方减去1;最小值: 10000000b即2的7次前面加个负符号:-128

计算机编程语言中比如说java中的byte类型,取值范围是 -128-->127,这...
byte是字节的意思,1byte= 8bit,范围就是10000000-11111111,最后转换成十进制,范围就是-128-127

1字节的表示范围为-128到127,为什么不是-128到128
在计算机中一般来说,一个字节8位,即可表示 2^8=256,有符号数那就是-128到128了,但实际表示的范围是-128到127。在补码中用(-128)代替了(-0),所以补码的表示范围为: (-128~0~127)共256个.-1-127的结果应该是-128,在用补码运算的结果中, [1000 0000]补 就是-128。但是注意因为实际...

相似回答