java中字节型数据范围是-128~127;为什么-128-1就会等于127;127+1又等于-128了呢?到底怎么算的啊?java字节

解决方案 »

  1.   

    溢出!最大的int + 1 = 最小的int
      

  2.   

    java中byte类型作计算,都会先转换成int类型再计算。
    比如
    byte b = 127 + 1;//这样写报错:Type mismatch: cannot convert from int to byte
    所以必须强制类型转换:
    byte b = (byte) (127 + 1);因此就能理解为什么是-128了:
    int型的127在计算机内的二进制是:
    0000 0000 0000 0000 0000 0000 0111 1111
    加1后变成:
    0000 0000 0000 0000 0000 0000 1000 0000
    即128
    强制转换后截取低8位变成
    1000 0000
    这是byte类型-128的补码。
      

  3.   

    楼上讲的到是挺详细的,byte字节占8位,127+1就溢出了,计算机进行运算时,以补码形式进行运行,最前面一位是符号位,所以就变成-128了
      

  4.   

    希望你用的是win7,打开附件里面的计算器。查看>程序员下面数字键左边选择,十进制和字节
    输入127,你可以看到数字下边的二进制
    0111 1111
    然后+1,你会看到二进制很正常的变成了
    1000 0000,
    但是显示的是-128因为最高位是符号位
      

  5.   

    数据溢出,byte 一个字节8为只能保存,256个数字,byte 从 -128到 +127,
    最大的再加 >1的数就会数据溢出,最小的再减 >1的也会溢出.
    127+1 = -128;
    127+2 = - 127;
    127+3 = -126;-128 - 1 = 127; 
    不光是byte类型,short、int、long、float、double 都会数据溢出。其实5楼分析的很充分了。
      

  6.   

    首先你肯定声明的是byte类型的,然后字节长度是8位,最左位是符号位,0为正数,1为负数
    127:0111 1111
    0  :0000 0001
    相加:1000 0000
    然后要明白第一位是1为负数,他的绝对值=补码+1,也就是0111 1111+0000 0001为128,所以最后结果是-128
      

  7.   

    127+1=-128
    这个问题五楼已经说得很清楚了至于为什么-128-1=127
    原因:
    -128:1000 0000
       1:0000 0001
    根据补码的计算:x+y=[x]+[y], x-y=[x]+[-y].x+y的变补
    至于变补的概念,去查吧
    所以:
    -128+1的变补:
    1000 0000
    1111 1111 
    结果:
    10111 1111
    取前八个0111 1111=127
      

  8.   

      public class Demobyte { /**
     * @param args
     */
    public static void main(String[] args) {
     byte a=127;
    byte b=1;
    byte c = (byte)(b+a);//-128 
    //byte 类型 的 运算 要是没哟 float 和double 里面的运算都是 int 型 的运算 ,, 然后 再 强制类型转换成byte类型
    System.out.println(c);
    byte d=-1;
    byte e= -128;
        byte f= (byte)(d+e);//127
        System.out.println(f);
    }}
    楼上说的很好 。。 就是这样的 要是没有 float  和 double  就 转换 为 int  运算  。。 算好之后 在强制类型转换 为 byte  !!