黑马程序员技术交流社区
标题:
表达式
[打印本页]
作者:
张海洋
时间:
2013-3-22 18:32
标题:
表达式
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
作者:
曹春贵
时间:
2013-3-22 19:04
额,这个问题已经经常被问到,以前帖子都有答案的,你可以找找看
作者:
安鹏宇
时间:
2013-3-22 19:13
short s1 = 1; s1 = s1 + 1
损失精度
short,byte,char,做运算会先把自己转换成int类型
要赋给左边的s1需要强制转换 s1 = (short)(s1+1)
short s1 = 1; s1 += 1;
没错,做+=是直接赋给了s1,只做一次运算
作者:
魏福伟
时间:
2013-3-22 19:15
short s1 = 1; s1是short类型的
s1 = s1 + 1;s1+1结果是int类型的,int类型的赋给shotrt类型的出错
short s1 = 1; s1 += 1;不会出错
作者:
魏福伟
时间:
2013-3-22 19:16
当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如下规则:
• 运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,
且运算结果与运算符左边数值类型相同。
在s1=s1+1;中,s1+1
运算的结果是int型,把它赋值给一个 short型变量s1,所以会报错;而在s1+=1;中,由于
是s1是short类型的,所以1首先被强制转换为short型,然后再参与运算,并且结果也是
short类型的,因此不会报错。那么,s1=1+1;为什么不报错呢?这是因为1+1是个编译时可
以确定的常量,“+”运算在编译时就被执行了,而不是在程序执行的时候,这个语句的效果
等同于s1=2,所以不会报错。前面讲过了,对基本类型执行强制类型转换可能得出错误的
结果,因此在使用+=、 -=、*=、/=、%=等运算符时,要多加注意。
作者:
魏福伟
时间:
2013-3-22 19:16
http://hi.baidu.com/brittlecat/item/a878b88eae028d2c110ef379
作者:
陈雨
时间:
2013-3-22 19:44
1.short类型为大小为16位,int为32位,s1 + 1则是16位+32为,低位和高位相加结果会强制转换成32位int型数据.
但S1为16位=32位,所以结果报错了.
2.s1 += 1是一步运算所以s1 +=1不 存在这个问题.
类型大小.png
(2.9 KB, 下载次数: 24)
下载附件
2013-3-22 19:43 上传
作者:
lxww
时间:
2013-3-22 19:52
亲。这个有很多人问过,你可以搜搜看。
作者:
魏福伟
时间:
2013-3-22 20:08
当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如下规则:
• 运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,
且运算结果与运算符左边数值类型相同。
在s1=s1+1;中,s1+1
运算的结果是int型,把它赋值给一个 short型变量s1,所以会报错;而在s1+=1;中,由于
是s1是short类型的,所以1首先被强制转换为short型,然后再参与运算,并且结果也是
short类型的,因此不会报错。那么,s1=1+1;为什么不报错呢?这是因为1+1是个编译时可
以确定的常量,“+”运算在编译时就被执行了,而不是在程序执行的时候,这个语句的效果
等同于s1=2,所以不会报错。前面讲过了,对基本类型执行强制类型转换可能得出错误的
结果,因此在使用+=、 -=、*=、/=、%=等运算符时,要多加注意。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2