(1)float a=5+(float)6.0;
(2)
byte m=5;
byte n=m+(byte)6;
这里(1)能编译通过,(2)为什么不能啊?
在(1)中6.0是默认的double型,所以强制转换成float的,这个我知道,在(2)中6是默认的int的,先强制转换成byte的,为什么就报错了呀?这两个不是一个道理吗

解决方案 »

  1.   

    byte,short,char相加,结果一律是int
      

  2.   

    1.byte的大小为8bits而int的大小为32bits
    2.java的二进制采用的是补码形式你要说怎么转的话
    一个byte跟0xff相与会先将那个byte转化成整形运算
    你自己研究研究位的运算 就懂了
      

  3.   


    byte m=5;
         //有可能丢失精度必须显示的转换(如果m+6 超过byte的范围,将丢失数据),目的是让程序员自己对后果负责
         //byte n=m+(byte)6;
         byte b = (byte)(m+(byte)6);
         System.out.println(b);
      

  4.   

    可是float不也是32位    而double是64位啊!
      

  5.   

    基本数据类型里面,(长)整型数据、(双精度)浮点数据是可以直接混合运算的
    当然,要注意运算精度。
    但是,其他类型的数据,在四则运算的时候,就要注意了。
    比如,boolean类型,不可以参与四则运算;
    byte类型,在运算时,会先转换成整形数据,在进行加减乘除等运算。所以,楼主的那个例子,要想运行下去,关键不在后面常量的类型转换,
    因为你无论怎么转换,前面变量都已经先被转换成整型数据了。
    也就是说,整个表达式的值,是一个整形数据。
    楼主可以试试:
    byte m=5;
    byte n=(byte)(m+6);
      

  6.   

    记得有位csdn强人分析过,java四则运算的最小单位是int,其他更小类型的运算在字节码中是转换为int来处理的,也就是说运算结果在字节码中至少是一个int。
    import java.awt.*;public class Java
    {
    public static void main(String args[])
    {
    byte m=5;
            byte b = (byte)(m+6);
            System.out.println(b);
    }
    }
    这样的话应该就没有问题了···
      

  7.   


    import java.awt.*;public class Java
    {
    public static void main(String args[])
    {
    byte m=5;
            byte b = (byte)(m+6);
            System.out.println(b);
    }
    }