byte b1 = 67;
byte b2 = 89;
byte b3 = (byte)(b1 + b2);在上述程序段中,b1 + b2的结果为156,已经超出了byte 类型的范围
我知道这里从int类型转化为byte类型时有一个“截”的过程,
但不知道这个过程是如何进行的?
为什么b3的最后结果为-100?菜鸟求救,请高手指点!

解决方案 »

  1.   

    直接截去超出的位。例如:
    System.out.println((byte)257);输出结果就是 1。
      

  2.   

    两个byte类型的值在进行+运算时会自动转换成int型的,而且结果也是int型的。
    题中两个byte类型相加后结果是int型,在强制转换为byte时由于超出了byte范围,所以报错,得不到正确的结果。
      

  3.   

    java中的数字是用补码表示的,在b1 + b2的结果156的补码和和原码一样.强制类型转换的"截"出来之后是当作补码来看待的,156的截出来的最高位是1,所以是负数.你可以自己算一下,正好是你说的那个数的补码.