黑马程序员技术交流社区

标题: 小问题求教 [打印本页]

作者: 帕格尼尼的眼泪    时间: 2013-7-23 22:58
标题: 小问题求教
int  a=1;
int  b=2;
short sum=a+b;
编译会出现报错,出现类型转换上的问题

short  sum=1+2;
为什么这样就不会报错?
1和2 不也是整型吗
现在的1和2是不是默认是short类型了???


作者: 黑骏马    时间: 2013-7-24 00:52
老师讲ab两个操作数都为int,所以结果sum也是int型。
但是short类型在内存中占用的字节数小于int类型的字节数,int转换为short可能丢失精度,所以int类型不能自动(隐式)转换为short类型。如果要转换则需要强制转换。

作者: 黑骏马    时间: 2013-7-24 00:53
看了你的问题后我也产生了一个疑问,有点长,我单独发个帖问好了。
作者: 张强1    时间: 2013-7-24 08:35
因为short类型在内存中占用的字节数小于int类型的字节数,由多字节向少可以自动转换。由小向多就必须强制转换了。
作者: 张林杰    时间: 2013-7-24 11:20
short类型的范围是-32,768 到 32,767,例如:定义个 short 类型的变量:short x = 32767;
在上式中,整数 32767 是int型,它从 int 隐式转换为 short。
但是如果整数的长度超过了 short 存储位置的大小,则将产生编译错误,比如short x = 32768;
所以楼主说的short  sum=1+2;可以看做short  sum=3;3没有超过范围,没有丢失精度,即int型3隐式转换为 short 3。
另外,如果定义了int a=1,b=2 ,short  sum=a+b;编译器则认为不能发生隐式转换。

作者: 帕格尼尼的眼泪    时间: 2013-7-24 18:29
黑骏马 发表于 2013-7-24 00:52
老师讲ab两个操作数都为int,所以结果sum也是int型。
但是short类型在内存中占用的字节数小于int类型的字节 ...

那么short sum=1+2 ,也就是short sum=3;这不就是int隐式转换成short吗
作者: 黑骏马    时间: 2013-7-24 23:11
帕格尼尼的眼泪 发表于 2013-7-24 18:29
那么short sum=1+2 ,也就是short sum=3;这不就是int隐式转换成short吗

定义int a=1,b=2; 这时sum=a+b,sum也是int类型,所以不能转换为short型,所以short sum=a+b;会报错。
直接定义short sum=3; 这时的sum是short类型,不存在类型转换。
作者: brucel50    时间: 2013-7-24 23:25
            int a = 1;
            int b = 2;
            short sum = (short)(a + b);
            //short类型比int类型范围要更小,所以你可以在这里加上一个强制转换
            short sum2 = 1 + 2;
            //此时的sum2已经是short类型了,如同:
            short sum3 = 3;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2