永发信息网

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

答案:3  悬赏:40  手机版
解决时间 2021-01-14 18:34
  • 提问者网友:情歌越听越心酸
  • 2021-01-14 07:09
详细帮我分析下1个字节时,java中 -128是怎么得到的
最佳答案
  • 五星知识达人网友:第幾種人
  • 2021-01-14 08:34
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。
全部回答
  • 1楼网友:零点过十分
  • 2021-01-14 09:59
2^8=256,
最高位是符号位,0 0000000~0
  • 2楼网友:一把行者刀
  • 2021-01-14 09:24
这个是取值范围的问题,利用溢出来实现负数的运算。
二进制数分为有符号二进制和无符号二进制,其中无符号二进制的一byte取值范围是-128到127
第一位(最高位)用来表示符号,0是正数,1是负数,全0肯定是0了。全1就表示负数的最小值。追问全1 是最小值 ,可-128怎么来的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯