byte类型的取值为什么是-128~127

  参考:https://blog.csdn.net/qq_22771739/article/details/84496115

     https://blog.csdn.net/boatalways/article/details/17027573

  Java的byte类型取值范围是-128~127为什么负数是128正数到127呢

  首先需要了解原码反码和补码

  正数的原码反码补码是一样的

  [+2]=[00000010]=[00000010]=[00000010]

  对于负数来说,它的原码反码补码就不相同

  [-2]=[10000010]=[11111101]=[11111110]

  最高位表示符号位0代表正数1代表负数,负数计算反码的规则是符号位不变,其余位取反即1变成0,0变成1,补码就是反码再加1

  为什么要设计出反码和补码

  因为计算机只有加法没有,减法,在做减法运算的时候,可以认为是加上一个负数,这样可以减少计算机电路的复杂度

  使用原码进行减法运算会出现问题,例如计算1-1,因为计算机没有加法只有减法,所以计算机自动换算成1+(-1)

  1-1=1+(-1)=[00000001]+[10000001]=[10000010]=-2 (符号位也参与运算)

  而1-1的实际结果是0

  为了解决这个问题,于是使用反码运算

  1-1=1+(-1)=[00000001]+[10000001]=[00000001]+[11111110]=[11111111]=[10000000]=-0

  通过反码计算的结果是11111111在计算一次反就成原码了,得出的结果是正确的,但是有一个问题是 00000000可以代表+0 10000000可以代表-0,其实是一样的,用2个编码实在是浪费。于是出现了补码解决0的符号以及两个编码的问题

  

猜你喜欢

转载自www.cnblogs.com/minseo/p/11733782.html