(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的,为什么就报错了呀?这两个不是一个道理吗
(2)
byte m=5;
byte n=m+(byte)6;
这里(1)能编译通过,(2)为什么不能啊?
在(1)中6.0是默认的double型,所以强制转换成float的,这个我知道,在(2)中6是默认的int的,先强制转换成byte的,为什么就报错了呀?这两个不是一个道理吗
2.java的二进制采用的是补码形式你要说怎么转的话
一个byte跟0xff相与会先将那个byte转化成整形运算
你自己研究研究位的运算 就懂了
byte m=5;
//有可能丢失精度必须显示的转换(如果m+6 超过byte的范围,将丢失数据),目的是让程序员自己对后果负责
//byte n=m+(byte)6;
byte b = (byte)(m+(byte)6);
System.out.println(b);
当然,要注意运算精度。
但是,其他类型的数据,在四则运算的时候,就要注意了。
比如,boolean类型,不可以参与四则运算;
byte类型,在运算时,会先转换成整形数据,在进行加减乘除等运算。所以,楼主的那个例子,要想运行下去,关键不在后面常量的类型转换,
因为你无论怎么转换,前面变量都已经先被转换成整型数据了。
也就是说,整个表达式的值,是一个整形数据。
楼主可以试试:
byte m=5;
byte n=(byte)(m+6);
import java.awt.*;public class Java
{
public static void main(String args[])
{
byte m=5;
byte b = (byte)(m+6);
System.out.println(b);
}
}
这样的话应该就没有问题了···
import java.awt.*;public class Java
{
public static void main(String args[])
{
byte m=5;
byte b = (byte)(m+6);
System.out.println(b);
}
}